我很困惑为什么在for
循环完成之前调用return resolve({ status: true, data: newIDs });
。
- 代码**
createPallet: (data) => {
return new Promise(async (resolve, reject) => {
const newIDs = [];
try {
for (const record of data) {
mysqlConnection.beginTransaction();
mysqlConnection.query(
"INSERT INTO ...",
[record.BatchId, record.PalletNumber, record.PrimaryWeightId],
async (error, results) => {
if (error) {
return reject(error);
}
// Create pallet sku record
await PalletSkusService.createPalletSku(
...
);
console.log(results.insertId);
newIDs.push(results.insertId);
}
);
}
return resolve({ status: true, data: newIDs });
} catch (error) {
mysqlConnection.rollback();
return reject(error);
}
});
},
- 期望**
我希望for循环获取所有新插入的id并将它们存储到newIDs
数组中,一旦完成,我就可以返回一个包含数据的resolve。
但是,我不太明白的是-为什么在for循环完成之前运行resolve?
在这种情况下,正确的方法是什么?
1条答案
按热度按时间qnzebej01#
mysqlConnection.query正在立即返回,而不是等待数据返回。我不知道您为此使用了什么库,但您希望找到基于promise的方法来完成此操作。然后,修改循环,使其在解析之前等待promise数组完成。