我想答案是forkJoin
/Promises.all
...但它多一点,请与我裸...异步操作的可观测(主题)时,中间有没有重叠的异步操作是完成
所以......我有一个承诺的来源,可以随机顺序到达,我需要一些方式来说“当所有承诺到期为止,完成后让我知道”。
在一个基于Promise的解决方案中,我最初考虑使用Promise.all
,但承诺可能仍然“到达”,而其他人尚未完成。有趣的是,对于“迭代Promise.all”有一个整洁的解决方法,在https://stackoverflow.com/a/37819138/239168
我试图做到这一点的方式。稍后阅读文档,我认为forkJoin
是Promise.all
等效,但是,同样的问题,我没有时间可以安全地呼叫forkJoin
或Promise.all
,因为总是可以再添加一个,而另一个仍处于待定状态。因为我现在可能没有意义,所以我想我会要求一些指导。
设置
(握住你的笑,如果这是愚蠢的,我是新来的Rx ...)
我有一个主题,我想,当知道所有的承诺,在这是完整的......还总是可以在任何时候得到新的补充承诺......
private promiseSource = new Subject<Promise<any>>();
promises$ = this.promiseSource.asObservable();
每当一个新的承诺“到达”,我只是将它添加到受
this.promiseSource.next(somePromise);
我想要奇迹般地发生的事情是 - 只要它拥有完整的承诺,就让主题“完成”。
例如
promises$.magicFlatMapForkJoinConcatMapTrickery().subscribe({
next: x => ...,
error: err => ...,
complete:() => {
console.log('all promises we got so far are done');
// nice to have, I want this to keep "listening" for new promises
promiseSource.youAreNotREALYCompletePleaseReset();
}
});
或者换句话说,我有一个观察的异步操作的,如果我们看一看的内容,我们可以看到重叠的异步操作,我想知道什么时候有没有重叠例如
|<-async action 1->| |<-async action 3->|
|<-async action 2->| |<-async action 4->|
/\ /\
find this gap
如果这些是例如http调用,我基本问 - 告诉我什么时候没有打开http调用。
TL;博士
如何落实这一承诺在RxJS世界基于答案...
https://stackoverflow.com/a/37819138/239168
酷,会试试看......我还在攀登悬崖:) –