Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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-暂停一个可观察对象,直到第二个可观察对象完成,_Rxjs_Observable_Rxjs5 - Fatal编程技术网

RxJS-暂停一个可观察对象,直到第二个可观察对象完成,

RxJS-暂停一个可观察对象,直到第二个可观察对象完成,,rxjs,observable,rxjs5,Rxjs,Observable,Rxjs5,我有一个场景,其中1个observable侦听事件,然后触发另一个异步事件,并在运行源observable中的下一项之前等待 第一个可观察对象的触发速度比异步事件快得多,它必须等待异步事件完成,然后才能从第一个可观察对象获取另一项 所以。。基本上,我需要从第一个可观察到的数据建立一个“队列”(因为我不能丢失源1中的数据) 源2应该一次从队列中获取一个项目,运行它,从队列中删除该项目,然后转到队列中的下一个项目 src1- --ev1---ev2---ev3----ev4---ev5--ev6-

我有一个场景,其中1个observable侦听事件,然后触发另一个异步事件,并在运行源observable中的下一项之前等待

第一个可观察对象的触发速度比异步事件快得多,它必须等待异步事件完成,然后才能从第一个可观察对象获取另一项

所以。。基本上,我需要从第一个可观察到的数据建立一个“队列”(因为我不能丢失源1中的数据)

源2应该一次从队列中获取一个项目,运行它,从队列中删除该项目,然后转到队列中的下一个项目

src1-  --ev1---ev2---ev3----ev4---ev5--ev6---
src2-  --ev1------------ev2-------------ev3--------ev4-------ev5------ev6
--------------async-----------async---------async------async------asyc
我查看了RX文档,似乎pausibleBuffered可能是一个解决方案,但我注意到它已在RX5中删除,这就是我正在使用的。有人能给出建议作为实现这一目标的正确方法吗?
谢谢

您可以使用
mergeScan
逐个运行异步操作,因为它需要上一个异步操作的结果来运行异步操作

const src2 = src1.mergeScan((_, value) => doSomething(value));

您可以使用
mergeScan
逐个运行异步操作,因为它需要上一个异步操作的结果来运行异步操作

const src2 = src1.mergeScan((_, value) => doSomething(value));

目前,您的图表还不清楚,尽管我首先推荐您编写一个图表。这确实有点帮助,但还不完全清楚。在任何情况下,对于措辞复杂的问题来说,这似乎是一个无损背压问题。无损背压的一个问题是,如果src1持续时间过长,最终会耗尽内存(或任何其他相关的有限资源)。否则你可以参考这个:我认为这是一个非常类似的问题,谢谢你的评论,是的,我可能没有解释得那么好。我能够在src1和src2观测值上使用CombineTest。检查队列的状态以及是否仍有异步操作正在进行。比我想象的要容易:)目前,你的图表还不清楚,尽管我首先推荐你写一个。这确实有点帮助,但还不完全清楚。在任何情况下,对于措辞复杂的问题来说,这似乎是一个无损背压问题。无损背压的一个问题是,如果src1持续时间过长,最终会耗尽内存(或任何其他相关的有限资源)。否则你可以参考这个:我认为这是一个非常类似的问题,谢谢你的评论,是的,我可能没有解释得那么好。我能够在src1和src2观测值上使用CombineTest。检查队列的状态以及是否仍有异步操作正在进行。比我想象的容易:)