我正在与网络服务进行通信,并且返回可能是负面或porisitvo,并且将落入调用的成功,但如果返回为负,我需要手动抛出异常
.map(res => res.json())
.subscribe(res => {
let returno = JSON.parse(res.d);
if (returno.status == 'success') {
this._loggedIn(returno);
} else {
throw returno;
}
}, err => {
console.error('ERROR', err);
});
答案 0 :(得分:1)
只需将对象传递给throw
,就可以在JS中抛出异常。在您的情况下throw err
。
答案 1 :(得分:0)
我希望您希望所有订阅者以同样的方式处理错误?因此,您可以在Observable级别处理错误,而不是订阅者级别。
因此,您可以执行以下操作:
public tryLogin(url: string): Observable<any> {
return this.http.get(url)
.map(res => res.json().d)
.map(res => {
if (res.status !== 'success') {
Observable.throw(res);
}
return res;
});
}
然后您可以按以下方式调用此代码:
this.tryLogin('mydata')
.subscribe(
data => this._loggedIn(data),
err => console.log(err);
)
这种方法的好处是,如果您不希望您的订阅者知道发生了什么,您可以对其进行抽象,并在next
回调中对其进行身份验证,或者处理error
回调失败的事件。