rxjs - 未使用 zip 调用 RxJS 管道
问题描述
我正在压缩三个 observable,三个 observable 中的每一个都有自己的“成功”回调,使用.pipe(tap() => {...});
. 当所有三个 observables 都没有错误地执行时,这可以正常工作,但是如果 observables 之一出错,那么所有的 tap 方法都不会执行。如果该 observable 成功运行,我怎样才能让 tap 方法始终执行?
var request1 = Observable.create(...); //Pretend this one will fail (though request2 or request3 could also fail)
var request2 = Observable.create(...);
var request3 = Observable.create(...);
request1.pipe(tap(() => {
//Unique success callback should always run if request1 succeeds, even if request2 or request 3 fails.
}));
request2.pipe(tap(() => {
//Unique success callback should always run if request2 succeeds, even if request1 or request 3 fails.
}));
request3.pipe(tap(() => {
//Unique success callback should always run if request3 succeeds, even if request1 or request 2 fails.
}));
var observable = zip(request1, request2, request3);
observable.subscribe(() => {
//Do something when all three execute successfully
});
解决方案
我相信这是预期的,并且是您正在处理的适当行为。您可能希望查看使用管道将catchError
lettable 传递到您的每个请求并返回一个空的 observable。
request1.pipe(tap(() => {
//Unique success callback
}), catchError((err) => {
return empty();
}));
这样你就可以处理那个 observable 的错误而不破坏新的zip
.
推荐阅读
- excel - VBA 运行时错误“1004”中的 GoalSeek:应用程序定义或对象定义错误
- javascript - 无法在 typescript 和 javascript 中以相同的方式导入库
- python - 如何使用 DFS 在有向图中递归查找路径
- java - 化妆品礼帽。
(RenderPlayer) 行:23?无法在 Minecraft 中渲染 Java 对象 - reactjs - 为什么我的字体真棒 LinkedIn 图标在我的反应网页上显示为这样?
- javascript - 当我的 JSON 代码没有错误时,为什么 JavaScript 引擎会返回语法错误?
- python - python中递归函数的问题
- c# - 在视图之间切换 wpf 窗口的最佳方法是什么?
- javascript - 为什么即使我使用了 useEffect 我的组件也不会重新渲染自己?(React.js)
- arrays - 获取循环 Swift 的当前位置