Можно использовать await
в функции async
.И, таким образом, чтобы использовать его с другими операторами, которые используются в async
, кроме for
, а именно do..while
и while
операторов цикла.
Есть ли способ вызвать асинхронную функцию вНЕ для цикла (например, foreach, map)
Это другой случай.Методы на основе обратного вызова, такие как forEach
, имеют свои собственные функции.Невозможно использовать await
внутри обычной функции:
arr.forEach(() => {
await ... // syntax error
});
Использование функции async
вместе с await
с forEach
является обычной ошибкой , потому что это приводит к обещаниюигнорируется:
arr.forEach(async () => {
await ... // isn't awaited outside function
});
Допустимо использовать async..await
с map
, так как он работает, обещание, возвращаемое из async
, используется map
и сопоставляется с результирующиммассив:
const arrOfPromises = arr.map(async () => {
await ...
});
Обещания должны быть явно связаны, чтобы их можно было ожидать за пределами map
Функция:
await Promise.all(arrOfPromises);