[英]throw error inside rxjs Observable
我正在尝试在 rxjs Observable 中抛出错误
new Observable(subscriber => {
Observable.throw("error1");
return Observable.throw("error2");
})
.subscribe(
() => {},
err => console.error(err)
);
错误 1 未被捕获。
error2 给出了一个编译错误:
Argument of type '(this: Observable<{}>, subscriber: Subscriber<{}>) => ErrorObservable<string>' is not assignable to parameter of type '(this: Observable<{}>, subscriber: Subscriber<{}>) => TeardownLogic'. Type 'ErrorObservable<string>' is not assignable to type 'TeardownLogic'
在 observable 中抛出错误的正确方法是什么?
使用Subscriber.error
:
new Rx.Observable(subscriber => { subscriber.error("error1"); subscriber.error("error2"); // not called because a stream will be finalized after any error }) .subscribe( () => {}, err => console.error(err) );
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>
使用new Observable()
或Observable.create()
您可以将错误直接推送给订阅者(观察者):
Observable.create(subscriber => {
subscriber.error(new Error("error1"));
})
.subscribe(
() => {},
err => console.log(err.message)
);
传递给new Observable()
的匿名函数可以选择返回取消订阅回调。 这就是为什么它会给你错误,因为你正在返回一个 Observable。
通常不需要使用Observable.throw("error1")
。 这只是一个只发出错误的 Observable,仅此而已。 例如,您可以使用它,如下所示:
Observable.create(subscriber => {
subscriber.next('whatever');
})
.merge(Observable.throw(new Error("error2")))
.subscribe(
() => {},
err => console.log(err.message)
);
看现场演示: https : //jsbin.com/fivudu/edit?js,console
在 v6 及更高版本中,您想要导入throwError
,该 Observable.throw 静态方法是 v5 兼容遗留下来的不幸必需品。
import { throwError } from 'rxjs';
throwError('hello');
来源: https : //github.com/ReactiveX/rxjs/issues/3733#issuecomment-391427430
使用您自己创建的 observable,您可以访问observer.error()
方法。
const obs = Observable.create(observer => {
// Emit a value.
observer.next("hello");
// Throw an error.
observer.error("my error");
});
注意:如果您使用的是 RxJS 4,则必须改用onNext()
和onError()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.