错误处理 – 使用Angular2异步管道进行错误处理

前端之家收集整理的这篇文章主要介绍了错误处理 – 使用Angular2异步管道进行错误处理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Angular2异步管道将值流入DOM.这是一个很简单的例子:
const stream = Observable.interval(1000)
  .take(5)
  .map(n => { if (n === 3) throw "ERROR"; return n; });

<div *ngFor="for num of stream | async">
  {{num}}
</div>

<div id="error"></div>

我想做的是使1-5的顺序显示,但在错误项(3)上,以某种方式填充错误消息的#error div.

这似乎需要两件事情:首先是角色异步管道做某些智能错误的能力,我看不到任何迹象.看源代码,显然是抛出一个JS异常,似乎不太友善.

第二个是错误后重新启动或继续序列的能力.我已经阅读了关于catch和onErrorResumeNext等等,但它们都涉及另一个序列,将被切换到一个错误.这使生成流的逻辑非常复杂,我只想在其中放置一系列数字(在这个简单的例子中).我有沉没的感觉,一旦发生错误,游戏结束,观察完成,只能用不同的观察者“重新启动”.我还在学习可观察这是事实吗?

所以我的问题是双重的:

Can Angular2的异步管可以做一些聪明的错误吗?
>可观察者有一些简单的方法错误后继续吗?

是的,你是正确的捕获运算符和能力做错事后发生的事情…

我会利用catch运算符来捕捉错误并做一些事情:

const stream = Observable.interval(1000)
  .take(5)
  .map(n => {
    if (n === 3) {
      throw Observable.throw(n);
    }
    return n;
  })
  .catch(err => {
    this.error = error;
    (...)
  });

并在模板中:

<div>{{error}}</div>

为了能够执行初始观察,您需要从发生错误的点开始创建一个新的:

createObservable(i) {
  return Observable.interval(1000)
    .range(i + 1,5 - i)
    .take(5 - i)
  });
}

并在catch回调中使用它:

.catch(err => {
    this.error = error;
    return this.createObservable(err);
  });

这两个问题可以帮助您:

> How to resumeOnError (or similar) in RxJS5
> RxJS Continue Listening After Ajax Error(最后回答)

猜你在找的Angularjs相关文章