【发布时间】:2018-01-17 00:22:22
【问题描述】:
我需要并行获取数据,然后使用 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-compatible”。 但它没有按预期工作。 任何帮助将不胜感激
【问题讨论】:
-
失败是什么意思?它有任何错误吗?
-
这听起来像是
addFood之一超时,抛出错误并导致Promise拒绝。这将导致Promise.all立即拒绝(Promise.all拒绝任何承诺拒绝)。 -
我的意思是其他的承诺都被拒绝了,即使他们没有完成运行。
-
如果其中一个承诺失败,Promise.all 将失败
-
.catch(function(err){ console.error(err); });这样做看看会发生什么
标签: javascript node.js promise