每个循环 node.js 打字稿的异步

时间:2021-06-01 20:19:41

标签: javascript node.js typescript asynchronous foreach

我尝试从每个循环的异步调用数据库操作。我有以下代码

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。

1 个答案:

答案 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(...);
相关问题