2015-04-21 111 views
0

我編碼其是多個承諾的組合物的方法:角鏈內同步方法承諾

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的情況。在這種情況下,該方法將是sync而不是async。承諾鏈會發生什麼?你們如何處理這個問題?

在此先感謝。

問候。

回答

1

爲了保持一致性,始終返回承諾,因爲您已經在asyncMethodn中執行過。

if條件應該只是返回deferred.resolve()並承諾鏈接在調用函數將無縫工作。在這種情況下(data.length=0)承諾將立即解決。

您也可以使用解析的值asyncMethodn來決定是否需要進一步調用鏈接。

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; 
}