为什么async / await在forEach循环中不同步ioredis get方法执行?

时间:2019-01-11 15:27:13

标签: node.js async-await ioredis

异步/等待方法:

Ids = ['abc','lmn','xyz']

Ids.forEach(function (resId){
    console.log('inside loop');
    async function operation(){
        var curObj = await redisClient.get('key1');
        console.log('done waiting');
  }
}

另一个函数的回调方法:

function operation(cb) {
         redisClient.get('key1', cb);
       }
operation(function(){
    console.log('inside operation');
});

我想等到curObj变量设置好并依次执行代码以打印“完成等待”。我使用了async / await,但似乎无法正常工作。然后,我使用了具有相同get方法的回调。我使用的是ioredis库。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

异步/等待approuch应该看起来像这样:

(async() => {
  const Ids = ['abc','lmn','xyz'];

  const operation = async (){
   var curObj = await redisClient.get('key1');
   console.log('done waiting');
  }


  for (const resId of Ids){
   console.log('inside loop');
   await operation();
  }
})()

async循环中没有forEach,但是您可以将其与for...of一起使用。
请注意,我正在使用IIFE函数,例如,如何在没有其他上下文的情况下使用async / await。