我正在编写一个由多个承诺组成的方法:
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时如何处理这种情况。在这种情况下,该方法将是同步而不是异步。承诺链会发生什么?你们怎么处理这个?
提前致谢。
问候。
答案 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;
}