从观察器内部的函数调用"next" "error"



让我们看看这个伪代码:

obs$.subscribe( response => {
if (response.statusFlag) {
console.log('Everything is good');
} else {
// I need to switch into the error-part of my observer: pseudoCode
// I need to go into Error-World
moveIntoErrorPart();
}
},
error => {
console.log('Im in Error-World');
});

所以在的情况下

  • response.statusFlag=真// 'Everything is good'
  • response.statusFlag=错误// 'Im in Error-World'

如何从内部next移动到error

您可以在pipe()中移动逻辑

obs$.pipe(
mergeMap(res => res.statusFlag==true ? of(res) : throwError('error'))
)
.subscribe(...)

在管道中执行确实有效,但我更喜欢这样说:

obs$.pipe(
filter(res => res.statusFlag),
throwIfEmpty(),
)
.subscribe(...)

在我的例子中,有一个微妙但重要的区别:如果存在多个排放,则只需要一个成功的排放。在范的例子中:如果有多个排放,只有一个失败的响应就足以使整个链条出错。

如果obs$只有一个发射,这种差异就无关紧要了,我想这里可能是这样,但除此之外,请确保您了解您的用例。

最新更新