正如在相关的RxJS文档中所述,如果没有错误,.subscribe()
method可以接受第三个在完成时调用的参数。
参考:
[onNext]
(Function
):功能调用在可观察到的序列中的每个元素。
[onError]
(Function
):在可观察序列异常终止时调用的函数。
[onCompleted]
(Function
):在可观察序列的正常终止时调用的函数。
因此,你可以处理你的路由逻辑在onCompleted
回调,因为它会在正常终止(这意味着不会有任何错误,当它被调用)被调用。
this.httpService.makeRequest()
.subscribe(
result => {
// Handle result
console.log(result)
},
error => {
this.errors = error;
},
() => {
// 'onCompleted' callback.
// No errors, route to new page here
}
);
作为一个方面说明,也有.finally()
method被称为上完成,无论呼叫的成功/失败的。这对于那些总是希望在HTTP请求后执行某些逻辑而不考虑结果(即用于记录目的或用于某些UI交互(如显示模式))的情况可能会有所帮助。
Rx.Observable.prototype.finally(action)
调用可观察序列正常或异常终止源之后的指定的操作。
举例来说,这里是一个基本的例子:
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/finally';
// ...
this.httpService.getRequest()
.finally(() => {
// Execute after graceful or exceptionally termination
console.log('Handle logging logic...');
})
.subscribe (
result => {
// Handle result
console.log(result)
},
error => {
this.errors = error;
},
() => {
// No errors, route to new page
}
);
出所有我发现关于观测的错误处理问题的答案实现的,这是最好的。谢谢 –