簡體   English   中英

Promise.all不要等待所有承諾解決

[英]Promise.all do not wait all promises to resolve

我需要並行獲取數據,然后使用Node.js同時使用它們進行計算。

所以我使用promise.all,但它表現得很奇怪。 當我第一次啟動時,計算時間會更長,並且在第一個承諾解決之后就會失敗,即使其他承諾成功。 當我第二次啟動它時,速度更快,因為所有數據都存儲在數據庫中,所以它成功了。 我真的不明白。 這是我的代碼:

var Promise = require('promise');
/* The list of objects */
var ingrd_list = JSON.parse(req.body.ingrd_list);
/* func.addFood is my function to apply on. It takes a callback parameter as last parameter */
var pAddFood = Promise.denodeify(func.addFood);
var pArray = [];

ingrd_list.forEach(function(ingrd){
    var my_p = pAddFood(ingrd);
    pArray.push(my_p);
    });

Promise.all(pArray).then(function(){
    console.log("success !");
    })
    .catch(function(){
            console.log("failure !");
    });

我在另一個文件中定義了addFood函數,如下所示:

exports.addFood = function(ingrd, cb){
        /* Some code */
    cb(data.id);
});

我想應用這個功能,所以我試着讓它“與denodeify兼容”。 但它沒有按預期工作。 任何幫助將不勝感激

問題是denodeify期望以標准方式callback(err, data) ,即callback(err, data)

但是你用callback(data)函數調用callback(data) ,所以它將你的承諾置於被拒絕的狀態,因為它認為你的數據實際上是錯誤,因此Promise.all失敗了

要解決這個問題,你應該修改你的addFood函數來調用這個回調就像這個cb(undefined, data.id);

ps:如果您想了解有關此回調樣式的更多詳細信息,可以查找“節點樣式回調”

暫無
暫無

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

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