Javascript Async for each loop node.js typescript
我尝试从async为每个循环调用数据库操作。我有以下代码Javascript Async for each loop node.js typescript,javascript,node.js,typescript,asynchronous,foreach,Javascript,Node.js,Typescript,Asynchronous,Foreach,我尝试从async为每个循环调用数据库操作。我有以下代码 let succussCounter = 0; let failureCounter = 0; let mydata=[101,102,104,105]; myData.forEach(async data => { let response = await DbConnector.updateSampleTable(data); if(response){
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。您需要学习一点wait-async forEach不适用于您的案例,因为它是同步的,它不等待任何东西。因此,在代码控制台中,日志是在foreach有时间运行任何查询之前运行的 这是我最喜欢的选项:(它按顺序运行db查询) 这里是另一个选项,它更接近您的代码,但在我看来可读性较差。但在parralel中运行查询具有优势
await Promises.all(myData.map(async data => {
let response =
await DbConnector.updateSampleTable(data);
if(response){
succussCounter ++;
}else{
failureCounter++;
}
});
console.log(...);
Array.prototype.forEach
始终是同步的。您的console.log总是在回调完成之前执行。使用一个好的ol'循环,循环中包含wait
(顺序),或Promise.all()
(并行)
await Promises.all(myData.map(async data => {
let response =
await DbConnector.updateSampleTable(data);
if(response){
succussCounter ++;
}else{
failureCounter++;
}
});
console.log(...);