在不满足条件时取消 Observable 中链

Cancelling an Observable mid-chain when a condition is not met

是否可以在链中取消一个Observable?假设我们有一些相互依赖的事件链,如果一个链发生故障,则无需继续。

observable_1.pipe(
  take(1),
  switchMap((result_1) => {
    // Do something that requires observable_1 and return something
    // If it fails, there is no point to proceed
    // If it succeeds, we can continue
  }),
  switchMap((result_2) => {
    // Do something that requires result_2 and return something
    // If it fails, there is no point to proceed
    // If it succeeds, we can continue
  }),
  // etc...
);

因此您可以使用 filter 运算符来达到此目的:

observable_1.pipe(
      take(1),
      switchMap((result_1) => {
      }),
      switchMap((result_2) => {
        // If it fails, there is no point to proceed
        result_2.status = false;
        // If it succeeds, we can continue
        result_2.status = true;
        return result_2;
      }),
      filter(result => result.status)
      // etc...
    );

看起来你需要 EMPTY

observable_1.pipe(
  take(1),
  switchMap((result_1) => {
    // doing something
    if (successful) {
      return of(result_2);
    }
    return EMPTY; // no further emits.
  }),
  // we are here only in cases of result_2. EMPTY won't trigger it.
  switchMap((result_2) => {
    // doing something
    if (successful) {
      return of(result_3);
    }
    return EMPTY; // no further emits.
  }),
  // we are here only in cases of result_3. EMPTY won't trigger it.
);