Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rxjs-在subscribe函数中等待_Rxjs - Fatal编程技术网

Rxjs-在subscribe函数中等待

Rxjs-在subscribe函数中等待,rxjs,Rxjs,如何在rxjs subscribe函数中使用wait,并在继续处理事件之前解析promise 这是一个密码笔: 输出为: new quote 10 new quote 11 new end {end: 20} new quote 12 new end {end: 30} new quote 13 如我所需,输出为: new quote 10 new end {end: 20} new quote 11 new quote 12 new quote 13 问题是“quote 11”在getDa

如何在rxjs subscribe函数中使用wait,并在继续处理事件之前解析promise

这是一个密码笔:

输出为:

new quote 10
new quote 11
new end {end: 20}
new quote 12
new end {end: 30}
new quote 13
如我所需,输出为:

new quote 10
new end {end: 20}
new quote 11
new quote 12
new quote 13
问题是“quote 11”在getData承诺解决之前激发,导致getData被调用两次


我认为switchMap应该能够处理这种情况。

部分问题在于,您试图在可观察的上下文中使用承诺<代码>开关映射在外部可观察对象发出时取消订阅任何内部可观察对象,这仍然不是您想要的行为。你需要这样的东西:

间隔(500)。管道(
concatMap(data=>{//concatMap将新的发射放在队列中,等待每个内部可观察到的完成,然后再发射下一个
console.log('新报价',数据);
如果(数据>=state.end){
return from(getData());//创建一个Observable,在承诺解析时完成
}否则{
返回(false);//允许我们过滤掉未调用getData的状态
}
}),
过滤器(newEnd=>!!newEnd),//忽略未调用getData的任何内容
点击(newEnd=>{//仅当调用getData时)
state.end=newEnd;
log('get new end',state);
})
).subscribe();

使用
concatMap
缓存下一个值,因此每个步骤中的比较仅在前一个步骤完成后进行。

将在继续之前解析从项目函数返回的可观察值,而不是承诺。
switchMap
实际上取消订阅内部可观察值
concatMap
是一个缓存排放物的工具,如果您想忽略外部排放物直到内部可见物完成,则
exhaustMap
new quote 10
new end {end: 20}
new quote 11
new quote 12
new quote 13