角度链接中的同步方法承诺

时间:2015-04-21 10:18:35

标签: angularjs

我正在编写一个由多个承诺组成的方法:

function myMethod(){
    var deferred = $q.defer();
    asyncMethod1(data1).then(function(){
        return asyncMethod2(data2);
    }).then(function(){
        return asyncMethod3(data3)
    }).then(function(){
        deferred.resolve(1);
    }).catch(function(error){
        //TODO
    });

    return deferred.promise;

asyncMethods的工作原理如下:

function asyncMethodn(data){
    var deferred = $q.defer();
    if(data.lenght == 0){
       //Nothing to do. Skip method.
       //deferred.resolve()?
       //return;?
    }

    anotherAsyncMethod(data).then(function(){
        deferred.resolve();
    }).catch(function(error){
        deferred.reject();
    });

   return deferred.promise;
}

我试图弄清楚当asyncMethod中的数据长度为0时如何处理这种情况。在这种情况下,该方法将是同步而不是异步。承诺链会发生什么?你们怎么处理这个?

提前致谢。

问候。

2 个答案:

答案 0 :(得分:1)

为了保持一致性,请始终返回一个承诺,就像您在asyncMethodn已经做过的那样。

if条件应该只返回deferred.resolve()并且保证调用函数中的链接可以无缝地工作。在这种情况下(data.length=0),承诺将立即得到解决。

您还可以使用asyncMethodn的已解析值来确定是否需要进一步调用链接。

答案 1 :(得分:0)

function asyncMethodn(data){
    var deferred = $q.defer();
    if(data.lenght == 0){
       deferred.resolve();
       return;
    }

    anotherAsyncMethod(data).then(function(){
        deferred.resolve();
    }).catch(function(error){
        deferred.reject();
    });

   return deferred.promise;
}