RxJS - 可观察模块 - 抛出未定义的

时间:2016-09-01 09:40:04

标签: javascript angular rxjs observable

我试图用一小段代码在一个observable中抛出一个错误:

return Observable.create((observer) => {
  observer.throw(new Error('Test'));
});

但出于某种原因,throw未定义。我不知道为什么在我班级的顶端,我有以下导入:

import 'rxjs/observable/throw';

我也尝试过:

import 'rxjs/Observable/throw';

import 'rxjs/add/observable/throw';

然而没有人在工作?我错过了一招吗?

对于Ionic 2,我使用rxjs@5.0.0-beta.6和angular@2.0.0-rc.4。

1 个答案:

答案 0 :(得分:2)

观察者(已重命名"订阅者"在RxJS v5,FYI中)没有名为throw()的方法。您正在混淆Observables(在这些序列上定义序列和运算符)和Subscribers / Observers(它们只接收来自Observable的下一个/错误/完整消息)。

你想要的是一个只发出错误对象的Observable。然后,任何订阅它的订阅者/观察者都将收到.error()通知。因此,请使用Observable.create()

,而不是使用Observable.throw(new Error('Test'))

此方法也比使用Observable.create(observer => ...)和调用observer.error(...)更强大,因为生成的Observable可以保证支持Rx合约。如果您使用的是.create(),则必须手动执行以下操作:确保错误后不再发出通知,Observable的所有后续订阅者都会立即收到错误通知,等等Observable.throw(...) ,这一切都会自动为你照顾。