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