我压缩了三个可观察变量,这三个可观察变量中的每一个都使用.pipe(tap() => {...});
实现了自己的“成功”回调。当所有三个可观察对象执行时都没有错误时,这种方法工作得很好,但如果其中一个可观察对象出错,则不会执行任何tap方法。如果观察值成功运行,我如何才能让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
});
发布于 2018-06-02 01:45:22
我相信这是意料之中的,对于你正在处理的事情来说,这是适当的行为。您可能希望考虑使用管道将catchError
lettable传递到每个请求中,并返回一个空的可观察对象。
request1.pipe(tap(() => {
//Unique success callback
}), catchError((err) => {
return empty();
}));
这样,您就可以在不破坏新zip
的情况下处理该可观察对象的错误。
发布于 2018-06-02 01:44:43
在您的代码中添加catch
块,您可以在其中跟踪错误。
request1.pipe(tap(() => {
//Unique success callback I want to run if request2 succeeds.
//It should still run if request1 fails
}),
catchError(// Error occured)
);
https://stackoverflow.com/questions/50648482
复制相似问题