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

标签 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) {
             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/

相关文章:

javascript - 创建标签的输入字段

angular - 为什么我在 Angular 10 中安装 ng-bootstrap 后立即出现构建错误?

http - Angular2 - http调用代码覆盖率

angular - 如何在 Angular 2 的元素上设置属性?

angular - md-autocomplete angular2 从服务器获取数据(带服务)

angular - ngFor 迭代对象数组并计算数组属性的长度

javascript - 内联 block 网格系统 - CSS 不适用于动态创建的元素

javascript - 使用javascript在iPad safari上打开一个新标签

javascript - GYP 在 pcduino 上安装 Node 时出错

javascript - 正则表达式拆分分隔符,内容不含空格