簡體   English   中英

為什么我的諾言沒有得到解決?

[英]Why isn't my promise getting resolved?

我有兩個功能-一個下載文件的輔助功能,如下

var downloadHelper = function(url, saveDir) {
    var deferred = Q.defer();

    setTimeout(function() {
        deferred.resolve("success");    
    }, 2000);


    return deferred.promise;
}

現在,我有了要並行下載的文件列表。 我對該函數的邏輯如下:

var downloadAll = function() {
    var fileDownloadList = []
    for(var key in config.files) {

        var deferred = Q.defer();
        var saveLocation = __base + config.localDir
        downloadHelper(
            config.files[key], 
            saveLocation
        ).then(function() {
            deferred.resolve("downloaded: " + fileUrl);
        }).catch(function(err) {
            deferred.reject(err);
        });

        fileDownloadList.push(deferred.promise);
    }

    Q.all(fileDownloadList).done(function() {
        console.log("All downloaded");
    },function(err) {
        console.log(err);
    });

    setTimeout(function() {
        console.log(fileDownloadList);
    }, 10000);
}

完成永遠不會被召喚!

出於調試目的,我添加了一個setTimeout,它將在10秒后調用,並且我看到的是2個文件中的第2個承諾已解決,第一個仍處於待處理狀態。

有任何想法嗎?

提前致謝

一種使代碼正常工作的方法

for(var key in config.files) {
    (function() {
        var deferred = Q.defer();
        var saveLocation = __base + config.localDir
        downloadHelper(
            config.files[key], 
            saveLocation
        ).then(function() {
            deferred.resolve("downloaded: " + fileUrl);
        }).catch(function(err) {
           deferred.reject(err);
        });
        fileDownloadList.push(deferred.promise);
    }());
}

但是由於downloadhelper返回了一個承諾,因此無需創建另一個

for (var key in config.files) {
    var saveLocation = __base + config.localDir
    fileDownloadList.push(downloadHelper(
        config.files[key],
        saveLocation
    ).then(function () {
        return("downloaded: " + fileUrl);
    }));
} 

你會看到我被刪除

.catch(function(err) {
    deferred.reject(err);
})

這是多余的,就像根本沒有抓住一樣

暫無
暫無

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

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