检查rxjs observable是否完整
我有一个类,在实例化时会进行一些web服务调用,伪代码如下:检查rxjs observable是否完整,rxjs,rxjs5,Rxjs,Rxjs5,我有一个类,在实例化时会进行一些web服务调用,伪代码如下: Rx.Observable.fromPromise(jQuery.getJSON('https://api.github.com/users')) .flatMap(function () { return Rx.Observable.fromPromise(jQuery.getJSON('https://api.github.com/users')); }); 同一个类正在侦听onclick事件 即使触发了此操作,如
Rx.Observable.fromPromise(jQuery.getJSON('https://api.github.com/users'))
.flatMap(function () {
return Rx.Observable.fromPromise(jQuery.getJSON('https://api.github.com/users'));
});
同一个类正在侦听onclick事件
即使触发了此操作,如果原始web服务调用已完成,请执行以下操作:
如果它们没有完成,等待它们完成,然后再做某事
我想知道如何用rxjs方法实现这一点?而不是设置变量和使用if语句。我将其称为异步门。 用Rx做这些其实很容易。 您将需要缓存web服务调用的可观察序列。 然后,在其他基于这些已完成的调用中,您只需
flatMap
关闭它们的结果。
由于这些都是从承诺中获得的,我相信结果会保留给迟到的订阅者,但如果没有,那么您只需要重播(1)
序列
所以在psudeo代码中
var startUpData = Rx.Observable.fromPromise(jQuery.getJSON('https://api.github.com/users'))
.flatMap(function () {
return Rx.Observable.fromPromise(jQuery.getJSON('https://api.github.com/users'));
});
var events = Rx.Observable....//Your event wired up here.
//When an event
events
.flatMap(function(evt){
//Wait until the startUpData yeilds, but pass on the evt data instead.
return startUpData.map(function(){ return evt;})
//do something here knowing that your event has fired, but the web services have also completed.
.subscribe();
你可以看到马特·巴雷特(Matt Barrett)在本视频51分钟后解释了一个异步门-
您可能还想考虑<代码>开关>代码>运算符,如果您不希望发生重叠事件
,我会把它称为异步门。 用Rx做这些其实很容易。 您将需要缓存web服务调用的可观察序列。 然后,在其他基于这些已完成的调用中,您只需flatMap
关闭它们的结果。
由于这些都是从承诺中获得的,我相信结果会保留给迟到的订阅者,但如果没有,那么您只需要重播(1)
序列
所以在psudeo代码中
var startUpData = Rx.Observable.fromPromise(jQuery.getJSON('https://api.github.com/users'))
.flatMap(function () {
return Rx.Observable.fromPromise(jQuery.getJSON('https://api.github.com/users'));
});
var events = Rx.Observable....//Your event wired up here.
//When an event
events
.flatMap(function(evt){
//Wait until the startUpData yeilds, but pass on the evt data instead.
return startUpData.map(function(){ return evt;})
//do something here knowing that your event has fired, but the web services have also completed.
.subscribe();
你可以看到马特·巴雷特(Matt Barrett)在本视频51分钟后解释了一个异步门-
您可能还想考虑<代码>开关>代码>运算符,如果您不希望发生重叠事件
,我相信<>代码>从或with latestfrom
。如果您希望使用服务先前提供的数据继续单击按钮,您可以使用combinelateest
const futureEvent$ = Rx.Observable.timer(3000);
const btnClick$ = Rx.Observable
.fromEvent(document.querySelector('button'), 'click');
const futureAndBtnClick$ = futureEvent$.combineLatest(btnClick$);
futureAndBtnClick$.subscribe(x => console.log('click + future stuff happened'));
我相信
与latest from
或组合测试将满足您的要求
根据您是否只允许使用服务提供的数据单击按钮一次,您可以使用with latestfrom
。如果您希望使用服务先前提供的数据继续单击按钮,您可以使用combinelateest
const futureEvent$ = Rx.Observable.timer(3000);
const btnClick$ = Rx.Observable
.fromEvent(document.querySelector('button'), 'click');
const futureAndBtnClick$ = futureEvent$.combineLatest(btnClick$);
futureAndBtnClick$.subscribe(x => console.log('click + future stuff happened'));
您能否指定一个预期行为的大理石图?这里有大理石图的例子;rxmarbles.com。这基本上是在一个时间轴上显示输入和预期输出。你能指定一个预期行为的大理石图吗?这里有大理石图的例子;rxmarbles.com。这基本上是在一个时间轴上呈现输入和预期输出。