首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rxjs:错误后保持无限流活动

rxjs:错误后保持无限流活动
EN

Stack Overflow用户
提问于 2020-10-31 19:35:34
回答 1查看 54关注 0票数 0

我想知道我是否可以在合并到我的无限主流中的每个外来流的管道中使用catchError,在我的主流的末尾使用一个catchError。此catchError返回对主流本身的引用以进行救援。它可能会导致内存泄漏或任何其他问题?

以下是示例代码:

代码语言:javascript
复制
import { Observable, fromEvent } from "rxjs";
import { catchError, mergeMap } from "rxjs/operators";

function foreignStream() {
  return new Observable(observer => {
    observer.next(0);
    observer.next(1);
    observer.next(2);
    observer.error("error");
  });
}

const stream$ = fromEvent(document, "click").pipe(
  mergeMap(foreignStream),
  catchError(x => {
    console.log(x);
    return stream$;
  })
);
stream$.subscribe(
  console.log,
  x => console.log("err" + x),
  () => console.log("complete")
);
EN

回答 1

Stack Overflow用户

发布于 2020-10-31 19:47:04

虽然这个解决方案看起来很有趣,但它实际上会在每次出错时都会导致新的订阅,而旧的订阅是打开的。相反,您可以在出现错误时使用retryretryWhen重新启动源可观察对象。

请尝试以下操作

retryRxJS

代码语言:javascript
复制
const stream$ = fromEvent(document, "click").pipe(
  mergeMap(foreignStream),
  mergeMap(foreignStream2),
  mergeMap(foreignStream3),
  retry() // <-- retry immediately infinite times
);
代码语言:javascript
复制
const stream$ = fromEvent(document, "click").pipe(
  mergeMap(foreignStream),
  mergeMap(foreignStream2),
  mergeMap(foreignStream3),
  retry(5) // <-- retry immediately 5 times on errors and complete
);

retryWhenRxJS

代码语言:javascript
复制
const stream$ = fromEvent(document, "click").pipe(
  mergeMap(foreignStream),
  mergeMap(foreignStream2),
  mergeMap(foreignStream3),
  retryWhen(error => error.pipe(delay(5000))) // <-- retry after 5 seconds infinite times
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64621267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档