Javascript 如何确保Observable.map仅在成功时执行?

Javascript 如何确保Observable.map仅在成功时执行?,javascript,angular,Javascript,Angular,我只想确保map函数中的代码只能在成功时调用,而不能在失败时调用 delete(department: Department): Observable<Department[]> { return this.post('/delete', body).map(response => { let index: number = this.departments.indexOf(department); if (index > -1

我只想确保
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;
     });
}
删除(部门:部门):可观察{
返回此.post('/delete',body).map(响应=>{
让索引:number=this.departments.indexOf(department);
如果(索引>-1){
本节介绍了部门拼接(索引1);
}
将此文件退还给各部门;
});
}
我不知道
map
中的代码是否只在成功时执行。而且,我必须返回一个
可观察的
,因此,我不能在这里应用
订阅
功能。

可观察的#map
操作符将仅在成功响应时执行(例如状态200)<代码>可观察#捕捉操作员旨在捕捉故障

此外,
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!');
            }
        });
}

回答得好。作为附加信息,subscribe中的第二个参数是可以使用error函数的地方。所以..删除(部门).订阅((成功)=>success,(错误)=>error,(complete)=>complete)所以必须捕获,对吗?因此我可以将错误重定向到subscribe调用。Observable#subscribe方法接受3个回调:…subscribe(onSuccess,onError,finallyFn);所以,若响应成功,并且映射在无错误的情况下传递,则将调用onSuccess,否则将使用“JavaScript error Occessed!”调用onError或“服务器错误!”这里我所说的失败是指服务器错误。您抛出一个自定义错误,但我想抛出返回的实际错误
.catch((error:any)=>{return Observable.throw(error)}
@Avinash Raj如果你想处理错误,那么是的,这是必须的。AFAIK,像
maps
这样的操作符是用来转换流中的数据的,而不是用来处理流的结果。另外,“失败”到底是什么意思?如果在一个所谓的“失败”之后仍然获得一个
响应
,也许您可以对其进行分析(即测试
响应.状态
响应.标题
),以决定是否值得继续。如果失败意味着较低级别的错误(即异常),那么您可以使用类似
.catch()
的操作符来处理它们。
    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!
        }
    );