codecamp

RxJS defer

创建一个 Observable,在订阅时,该 Observable 调用一个 Observable 工厂以为每个新的 Observer 创建 Observable。

defer<R extends ObservableInput<any> | void>(observableFactory: () => R): Observable<ObservedValueOf<R>>

参量

observableFactory Observable 工厂函数,用于为预订输出 Observable 的每个 Observer 调用。也可能会返回一个 Promise,它将即时转换为 Observable。

returns

Observable<ObservedValueOf<R>>:一个 Observable,其 Observers 的订阅触发对给定 Observable 工厂函数的调用。

描述

延迟创建 Observable,即仅在订阅时创建。

推迟大理石图

defer允许您仅在观察者订阅时创建观察者,并为每个观察者创建一个新的观察者。它等待,直到观察者订阅它,然后它生成一个观察者,通常带有观察者工厂功能。它为每个订阅用户重新进行此操作,因此尽管每个订阅用户可能认为自己正在订阅相同的 Observable,但实际上每个订阅用户都拥有自己的个人 Observable。

随机订阅可观察的点击或间隔的观察

import { defer, fromEvent, interval } from 'rxjs';


const clicksOrInterval = defer(function () {
  return Math.random() > 0.5
    ? fromEvent(document, 'click')
    : interval(1000);
});
clicksOrInterval.subscribe(x => console.log(x));


// Results in the following behavior:
// If the result of Math.random() is greater than 0.5 it will listen
// for clicks anywhere on the "document"; when document is clicked it
// will log a MouseEvent object to the console. If the result is less
// than 0.5 it will emit ascending numbers, one every second(1000ms).

也可以看看

RxJS ConnectableObservable
RxJS empty(已弃用)
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

RxJS operators

RxJS fetch

RxJS testing

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }