gpt4 book ai didi

javascript - Promise.all 不要等待所有的 promise 来解决

转载 作者:行者123 更新时间:2023-11-30 11:54:39 24 4
gpt4 key购买 nike

我需要并行获取数据,然后使用 Node.js 同时计算它们。

所以我使用 promise.all,但它的行为很奇怪。当我第一次启动它时,计算时间更长,并且在第一个 promise 解决后它就失败了,即使其他人成功了。当我第二次启动它时,它更快,因为所有数据都存储在数据库中,所以它成功了。我真的不明白。这是我的代码:

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”。但它没有按预期工作。任何帮助将不胜感激

最佳答案

问题是denodeify期望你的回调以标准方式调用,即callback(err, data)

但是你用callback(data)调用你的回调,所以它把你的promise置于拒绝状态,因为它认为你的数据实际上是错误,因此Promise .all 失败

要解决这个问题,您应该修改 addFood 函数以像这样调用回调 cb(undefined, data.id);

ps:如果想更详细了解这种回调方式,可以找“node style callback”

关于javascript - Promise.all 不要等待所有的 promise 来解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38382987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com