簡體   English   中英

$ q.all - 太早解決?

[英]$q.all - resolving too early?

我有一個函數,可以進行一些服務器調用:

function doCalls(options) {
    var deferred = $q.defer;
    myService.doCallOne(options).then(function(response){
        myService.doCallTwo().then(function() {
            deferred.resolve();
        });
    });
    return deferred.promise;
}

我有一系列不同的選項,我想創建一個promises數組傳遞給$q.all ,所以我這樣做:

var promiseArray = [];
_.each(optionArray, function(options) {
    promiseArray.push(doCalls(options));
});

然后我試着等他們來解決:

$q.all(promiseArray).then(function() {
    doNextPart();
});

問題是, doNextPart()似乎在我的任何承諾解決之前被調用。 我在做什么明顯錯了嗎?

你忘了調用 $q.defer ,所以它實際上並沒有創建一個延遲。 你的doCalls函數調用返回undefined ,你的deferred.resolve()調用拋出異常(被promises吞噬), $q.all立即用undefined s數組實現。

您可以將代碼更改為

var deferred = $q.defer();
//                     ^^

但實際上你應該避免延遲反模式 只是用

function doCalls(options) {
    return myService.doCallOne(options).then(function(response){
        return myService.doCallTwo();
    }).then(function(secondResponse) {
        return undefined; // you might want to omit this
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM