我有一个可观察的,从`输入中侦听keyup
事件。
在每个keyup
上,它向服务器发出请求,如果没有任何值,则会抛出异常。
.map(function (oResp) {
if (oResp.data.results.length === 0) {
throw new Error(self.getTextBundle("insPlantInvalid"));
}
return oResp.data.results;
})
抛出异常后,observable将不再监听该事件。
rxjs
中的异常处理是否以这种方式工作?
答案 0 :(得分:1)
是的,这是正确的行为。异常会发出operator send an error
通知。 error
或complete
信号都必须是最后发出的信号,同时也是cause unsubscription。
要重新订阅或处理错误,有retry()
,retryWhen()
,catch()
或onErrorResumeNext()
等运营商。我想你已经知道了。
答案 1 :(得分:0)
.catch()
也可用于处理错误。
this.http.get('url').map(res => res.json()).catch(() => Observable.of({error: true})
如果出现错误,则返回{error: true}
并且可观察到的事件不会中断。但是在这个响应旁边的map运算符中需要处理这种情况。