![](/img/trans.png)
[英]Why does this `Promise.all()` statement not wait for the promises to resolve?
[英]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.