我尝试从每个循环的异步调用数据库操作。我有以下代码
let succussCounter = 0;
let failureCounter = 0;
let mydata=[101,102,104,105];
myData.forEach(async data => {
let response =
await DbConnector.updateSampleTable(data);
if(response){
succussCounter ++;
}else{
failureCounter++;
}
});
console.log('succussCounter = ' + succussCounter);
console.log('failureCounter = ' + failureCounter);
我想在完成整个循环后打印成功计数和失败计数。但这总是打印两者都是 0。
答案 0 :(得分:0)
你需要学习一些 await async。
forEach 只是不能用于您的情况,因为它是同步的,它不等待任何东西。因此,在您的代码控制台日志在 foreach 有时间运行任何查询之前运行。
这是我最喜欢的选项:(它按顺序运行数据库查询)
for (let data of myData) {
let response =
await DbConnector.updateSampleTable(data);
if(response){
succussCounter ++;
}else{
failureCounter++;
}
}
console.log(...);
这是另一种选择,它更接近您的代码,但在我看来可读性较差。但它具有并行运行查询的优势。
await Promises.all(myData.map(async data => {
let response =
await DbConnector.updateSampleTable(data);
if(response){
succussCounter ++;
}else{
failureCounter++;
}
});
console.log(...);