【发布时间】:2021-12-26 13:23:55
【问题描述】:
我在 promises =[] 数组中推送承诺,但是当在承诺中传递承诺时。如果我的代码有任何问题,所有数组都保持为 null 并解决并发送 null 结果请回答
searchProductVariant: (start, end, combinations) => {
return new Promise((resolve,reject)=>
{
var promises = [];
console.log(start, " ", end);
for (let i = start; i < start + end; i++) {
vv = combinations[i - start].product_variant_name.split("_");
console.log("kk", vv);
vv.forEach((v) => {
sql = `SELECT id FROM ecommerce.variant_values as varval where varval.value like '${v}'`;
pool.query(sql, [], (error, results, fields) => {
if (error) {
console.log("the errrror is", error);
}
if (results[0].id) {
console.log("i is ", i);
let temp = addProductVariantDetails(i, results[0].id);
promises.push(temp
);
}
});
});
}
console.log(promises); //it prints null
return Promise.all(promises)
.then((resul) => {
return resolve(resul);
})
.catch((err) => {
return reject(err);
});
})
}
【问题讨论】:
-
这段代码应该做什么?此外,这看起来不像完整的代码。请发帖minimal reproducible example。
-
这是 addProductVariantDetails 函数返回一个承诺返回一个承诺的完整代码
-
这个函数在哪里调用?可能的输入是什么?预期的输出是什么?
-
预期的输出是在数据库中成功添加行时来自数据库的消息,或者如果出现错误则为错误消息。 addProductVariantDetails 在数据库中保存变体详细信息并返回一个承诺它。此函数多次调用,因此将其推送到数组中。在 promise.all 中传递该数组应该等到所有 promise 解决并传递结果
-
这段代码有一些明显的问题,但是您是否考虑过为您的数据库寻找一个支持 promise/async/await 的客户端?
标签: node.js promise promise.all