我正在学习RxJS,并试图用之前的Promise替换一些我做过的代码,但是我一直在努力寻找正确的方法来组合可观察的对象。
我有一个调用多个API的代码,并且每个API调用都执行相同的代码。而且,在完成API调用之后,我还有一些其他代码只能执行一次,并且只能执行一次。我用Promises做到了这一点,我做了多个Promises,对于每个Promise,我执行相同的代码,然后Promise.all()我执行其他代码。
所以我试图用RxJS做到这一点:
var apiCallIterator = ["id1", "id2", id3];
var apiCallObservable = from(apiCallIterator)
.pipe(
mergeMap(apiCallIterator => {
return makeAnApiCall();
})
);
apiCallObservable.subscribe({
next: value => {
// do some code for each API call
},
error: () => {
// api call failed
}
})
Run Code Online (Sandbox Code Playgroud)
这对于我的任务的第一部分效果很好,它将在每次API调用完成后执行相同的代码。但是在所有API调用完成之后,我找不到一种将所有结果都集中到一个位置的方法。
也许我从一开始就做错了,但是这部分似乎对我来说很好。
最容易的只是添加toArray():
from(apiCallIterator)
.pipe(
mergeMap(val => makeAnApiCall()),
toArray(), // collect all results
)
.subscribe(allResults => ...); // allResults.forEach(...) to iterate all results
Run Code Online (Sandbox Code Playgroud)
您也可以使用,forkJoin但随后必须事先准备所有Observables源的数组。但是,这仅是您的偏爱。
https://stackblitz.com/edit/rxjs6-demo-qbvhjh?file=index.ts
| 归档时间: |
|
| 查看次数: |
2753 次 |
| 最近记录: |