我试图用一小段代码在一个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。
答案 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(...)
,这一切都会自动为你照顾。