开发者社区> 问答> 正文

关于angular的promise的问题

有一个接口,这个接口的作用是每次更新数据库的一个字段。

在一个循环里,连续发送多次ajax请求,并且需要这多次请求都成功之后,后面做一些事情。

成功的定义是:没有抛出异常,且服务器端返回过来的数据中的 state === "SUCCESS"

请问,如果在 state !== "SUCCESS"即修改不成功的时候,能使$q.all(promises)中的
error回调执行?

例如:
screenshot
screenshot

展开
收起
杨冬芳 2016-06-23 12:37:33 1893 0
1 条回答
写回答
取消 提交回答
  • IT从业

    这时候你需要的是interceptors,具体做法可以这样:

    //新增拦截器:
    app.factory('StateInterceptor', function ($q)
    {
        return {
            response: function (response)
            {
                if(response.data.state !== 'SUCCESS'){
                   return $q.reject(response);
                }
                return response;
            }
        }
    });
    
    //配置拦截器给app
    app.config(function ($httpProvider)
    {
        $httpProvider.interceptors.push('StateInterceptor');
    });

    然后你的代码可以改成这样:

    var toModifyAttr = {
        title: '新标题',
        desc: '新描述',
        price: 199 // 新价格
    }
    
    var promises = Object.keys(oModifyAttr).map(key => $http(params));
    
    $q
        .all(promises)
        .then(function() {
            console.log('all done!!');
        // 下面做一些修改成功之后的工作
        // 移除loading遮罩
        // ...
        // ...
        })
        .catch(function() {
            console.log('errors here');
        });
    2019-07-17 19:46:07
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Angular从零到一 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载