javascript - 如何组合多个 observable、RxJS 的结果?
问题描述
我正在学习 RxJS 并试图用 Promise 替换我之前所做的一些代码,但我正在努力寻找组合 observables 的正确方法。
我有一个调用多个 API 的代码,并且每个 API 调用都执行相同的代码。此外,在 API 调用完成后,我还有一些其他代码应该只执行一次并且只执行一次。我用 Promise 做到了这一点,我做了多个 Promise,对于每个 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
}
})
这适用于我任务的第一部分,它会在每次 API 调用完成后执行相同的代码。但是在完成所有 API 调用后,我找不到一种方法可以在一个地方获得所有结果。
也许我从一开始就做错了,但这部分似乎对我来说很好。
解决方案
最容易添加toArray()
:
from(apiCallIterator)
.pipe(
mergeMap(val => makeAnApiCall()),
toArray(), // collect all results
)
.subscribe(allResults => ...); // allResults.forEach(...) to iterate all results
你也可以使用forkJoin
,但你必须事先准备一个包含所有 Observables 源的数组。但是,这只是您的偏好问题。
推荐阅读
- react-native - 有没有办法找出pubg Mobile特定页面的深层链接
- .htaccess - .htaccess 仅在不访问子目录时重定向
- go - 启动 Go Web 服务器时 Windows 防火墙总是提示
- swift - 迅速。结合。重试时有没有办法多次调用发布者块?
- algorithm - 与完整性相关的问题:P = PC 吗?
- ansible - 如何将 Ansible Inventory 名称作为变量导出到服务器
- flutter - Flutter - 正确导入的包上的未定义名称
- angular - 无法在本地 Angular 项目上运行 npm install
- ios - 在本机 ios 中执行 put/post/patch 请求时出现 500 错误
- java - 通过提供列位置 POI 来读取选择性列的功能