首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >未使用zip调用RxJS管道

未使用zip调用RxJS管道
EN

Stack Overflow用户
提问于 2018-06-02 01:33:40
回答 2查看 1.7K关注 0票数 2

我压缩了三个可观察变量,这三个可观察变量中的每一个都使用.pipe(tap() => {...});实现了自己的“成功”回调。当所有三个可观察对象执行时都没有错误时,这种方法工作得很好,但如果其中一个可观察对象出错,则不会执行任何tap方法。如果观察值成功运行,我如何才能让tap方法始终执行?

代码语言:javascript
复制
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
});
EN

回答 2

Stack Overflow用户

发布于 2018-06-02 01:45:22

我相信这是意料之中的,对于你正在处理的事情来说,这是适当的行为。您可能希望考虑使用管道将catchError lettable传递到每个请求中,并返回一个空的可观察对象。

代码语言:javascript
复制
request1.pipe(tap(() => {
    //Unique success callback
}), catchError((err) => {
    return empty();
}));

这样,您就可以在不破坏新zip的情况下处理该可观察对象的错误。

票数 2
EN

Stack Overflow用户

发布于 2018-06-02 01:44:43

在您的代码中添加catch块,您可以在其中跟踪错误。

代码语言:javascript
复制
request1.pipe(tap(() => {
    //Unique success callback I want to run if request2 succeeds.
    //It should still run if request1 fails
}),
    catchError(// Error occured)
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50648482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档