我只是想确保 map
函数内的代码仅在成功时调用,而在失败时不调用。
delete(department: Department): Observable<Department[]> {
return this.post('/delete', body).map(response => {
let index: number = this.departments.indexOf(department);
if (index > -1) {
this.departments.splice(index, 1);
}
return this.departments;
});
}
我不知道map
中的代码是否仅在成功时执行。而且,我必须返回一个 Observable
所以,我不能在这里应用 subscribe
函数。
最佳答案
Observable#map
运算符仅在成功响应时执行(例如状态 200)。 Observable#catch
运算符旨在捕获失败。
此外,Observable#catch
运算符也会捕获映射成功响应时抛出的 JavaScript 错误。示例:
fetchDashboardData(): Observable<Dashboard> {
return this._http.get(reqUrl, reqOptions)
.map((response: Response) => new Dashboard(response.json().items[0].dashboard))
.catch((error: any) => {
if (error instanceof Error) {
// js error, e.g. response.json().items was an empty array
console.log(error); // => “Cannot read property 'dashboard' of undefined...
return Observable.throw('Incomplete response data!');
} else {
return Observable.throw('Server error!');
}
});
}
订阅区 block :
this.dashboardService.fetchDashboardData().subscribe(
(dashboard: Dashboard) => {
this.dashboard = dashboard;
console.log('Success fetching dashboard data!', dashboard);
},
(errMssg: string) => {
console.error(errMssg); // => 'Incomplete response data!'
// or 'Server error!'
},
() => {
// finally block!
}
);
关于javascript - 如何确保 Observable.map 仅在成功时执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41765527/