angular - 在 RxJS 6 和 Angular 6 出现错误后如何保持可观察性

标签 angular rxjs angular6 rxjs6

任何人都可以帮助解决 this._getReactions$.next() 的场景每次都不工作 this.http.get(...)得到一个错误。我想让 observable 保持事件状态以获取下一个输入。

private _getReactions$: Subject<any> = new Subject();

 constructor() {
  this._getReactions$
  .pipe(
    switchMap(() => {
        return this.http.get(...)
        // http request 
    }),
    catchError(error => {
      console.log(error);
      return empty();
    })
  )
  .subscribe(data => {
      console.log(data)
      //results handling
  });
 }



onClick() {
  this._getReactions$.next();
}

最佳答案

如果 observable 死了,它会调用它的错误处理程序并且它们被关闭,你不能通过它们发送任何东西,这意味着它们在上游的所有东西都被关闭,包括间隔是死的。

what if we want to live.


屏蔽主观察者链是解决方案
把catch放在switchmap里面
每当请求被触发时 switchmap 创建 ajax observable,这次使用catch .switchmap有一种行为表明我的消息来源
还没有完成所以我真的不在乎 child
完成我会继续前进。
 constructor() {
  this._getReactions$
    .pipe(tap(value => { this.loading = true; return value }),
      switchMap(() => {
        return this.http.get(...).pipe(
          catchError((error) => this.handleError(error)))
        // http request
      }),
    )
    .subscribe(data => {
      console.log(data)
      //results handling
      this.error = false;
      this.loading = false
    });
}

private handleError(error: HttpErrorResponse) {

  this.error = true;
  console.log(error)
  this.loading = false
  return empty();
Live Demo
Detailed Info
PS:嵌套在任何 flattening 中运算符,例如 mergeMap , concatMap , exhaustMap和其他展平运算符也可以工作。

关于angular - 在 RxJS 6 和 Angular 6 出现错误后如何保持可观察性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52370506/

相关文章:

angular - 将打印作业直接交给打印机 angular 6

sqlite - 我如何将数据传递到我的 SQLite 数据库中

angular - 如何更改angular4中md-input-container的下划线颜色?

rxjs - 如果其中一个可观察停止发出事件,为什么 Observable.race 不工作?

javascript - 错误后可观察到 rx 损坏

Angular:观察两种状态但只执行一次

angular - 重定向 Angular 2 中的不匹配路由

angular - 有没有办法用 ng new 命令指定 Angular 版本

javascript - 水平居中 MatDialog,宽度为 100%,最大宽度固定

Angular 6 - 路线改变时保持滚动位置