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

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

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 голосов
/ 11 января 2019

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

...