AngularJS $ q服务响应按顺序进行异常处理

时间:2017-07-27 14:13:18

标签: javascript angularjs node.js promise q

我有一个函数,它使用for循环的promises顺序响应异步调用,但是当我从代码中获得异常时循环中断,但是我想继续我的循环,即使在异常抛出之后功能

我的异步功能是

function asyncFun(a) { 
    var q = $q.defer(); 
    setTimeout(function(){
        if(a == 4) throw new Error('custom error'); 
        q.resolve(a);
    }, 1000); 
    return q.promise; 
}

和链函数是

function getData() {
    var chain = $q.when();
    for (var i = 0; i < 10; i++) {
        (function(i) {
            chain = chain.then(function() {
                return asyncFun(i).then(function(res) {
                    console.log(res);
                }).catch(function(ex) {
                    throw ex;
                });
            }).catch(function(ex) { throw ex });
        })(i);
    };
    return chain
}

当我调用getData();时,它会在i = 4上抛出错误后停止循环,但我想继续{10}条目的for循环。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

正如我在评论中所说,错误可能被视为特殊值,因此您可以在链承诺后执行特殊行为。

试试这段代码:

function getData() {
    var chain = $q.when();
    for (var i = 0; i < 10; i++) {
        (function(i) {
            chain = chain.then(function() {
                return asyncFun(i).then(function(res) {
                    console.log(res)
                }).catch(function(ex) {
                    console.log(ex); // do not throw error but handle the error
                });
            }).catch(function(ex) { throw ex });
        })(i);
    };
    return chain
}