从观察者内部的“下一个”函数中调用“错误”

时间:2019-10-29 09:25:36

标签: error-handling rxjs observable

让我们看看这个伪代码:

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 = true // 'Everything is good'
  • response.statusFlag = false // 'Im in Error-World'

如何从INSIDE next移至error

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

在管道中进行确实是有效的,但我会这样说:

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

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

如果obs $仅具有一次发射,那么这种差异将无关紧要,我想这可能是这种情况,但否则请确保您知道用例。