Почему async/await не синхронизирует выполнение метода ioredis get внутри цикла forEach?

Асинхронный / ожидающий подход:

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 ответ

Решение

Приложение async/await должно выглядеть так:

(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 без другого контекста.

Другие вопросы по тегам