【问题标题】:RxJS Error Observable when another emits value当另一个发出值时可观察到 RxJS 错误
【发布时间】:2020-12-07 19:59:13
【问题描述】:

我在这里尝试做的人为示例:

const source = interval(1000);
const errorWhenThisEmits = timer(2500);

source.pipe(/* someOperatorHere? */).subscribe({
  next: () => console.log('next!'),
  error: (err) => console.log(err)
});

// desired outcome:
// 1000ms: next!
// 2000ms: next!
// 2500ms: error message

当第二个 observable 发出值时,是否可能导致源 observable 出错?

takeUntil 接近,但完成而不是错误。

【问题讨论】:

    标签: javascript rxjs rxjs6


    【解决方案1】:

    你可以合并 observables

    const source = interval(1000);
    const notifier = timer(2500).pipe(switchMap(() => throwError("error message")));
    
    merge(source, notifier).subscribe({
      next: () => console.log("next!"),
      error: err => console.log(err)
    });
    

    见 stackblitz:https://stackblitz.com/edit/rxjs-ony9vx?file=index.ts

    【讨论】:

      【解决方案2】:

      发现takeUntil 如果通知器 observable 出错,会报错父 observable。

      const source = interval(1000);
      // added switchMap to throwError
      const notifier = timer(2500).pipe(switchMap(() => throwError('error!')));
      
      source.pipe(takeUntil(notifier)).subscribe({
        next: (data) => console.log(data),
        error: (err) => console.log(err)
      });
      

      这个输出:

      0
      1
      error!
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-08
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2016-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多