Как сделать так, чтобы в цикле <code>for</code> можно было использовать ожидание <code>await</code>? <br/> В описании циклов упоминается, что <code>await</code> может применяться только с <code>for of</code>, но в моем случае необходимо выполнить цикл определенное количество раз, а не по элементам массива. <br/> Могу ли я как-то обойтись без создания дополнительного массива и заставить <code>for of</code> выполниться определенное количество раз, или же существует способ внедрить <code>await</code> в обычный цикл <code>for</code>?
Да, вы можете использовать цикл `for` с `await`, если он обернут в асинхронную функцию. Вот несколько способов, как можно реализовать ожидание в цикле, когда вам нужно перебрать элементы определенного количества раз. ### 1. Использование `for ... of` с массивом заданной длины Вы можете создать массив на лету, используя метод `Array.from()`, чтобы сгенерировать массив нужной длины, а затем использовать `for ... of` для итерации: ```javascript async function example() { const length = 5; // длина цикла const array = Array.from({ length }, (_, i) => i); // создаем массив [0, 1, 2, 3, 4] for (const i of array) { await new Promise(resolve => setTimeout(resolve, 1000)); // имитация асинхронной операции console.log(i); } } example(); ``` ### 2. Использование обычного цикла `for` Вы также можете использовать обычный цикл `for`, так как он также может использовать `await`, если находится внутри асинхронной функции: ```javascript async function example() { const length = 5; // длина цикла for (let i = 0; i < length; i++) { await new Promise(resolve => setTimeout(resolve, 1000)); // имитация асинхронной операции console.log(i); } } example(); ``` Оба метода позволят вам использовать `await` для асинхронных операций внутри цикла. Выбор между ними зависит от вашего предпочтения и читаемости кода.
Обычный цикл чем не цикл?
const chain = async times => { for (let n = times; n > 0; n--) { console.log(`${n} starting..`); await new Promise(resolve => setTimeout(resolve, 800)); console.log(`${n} ..finished`); } }; chain(4).then(() => console.log('Done'));
const something = async _ => new Promise(resolve => setTimeout(resolve, 100)); const asyncRecursive = async (limit, count = 0) => { await something(); console.log(count); count+=1; if (count < limit) { await asyncRecursive(limit, count); } } let limit = 10; (async function() { for(let n of Array.from(Array(limit).keys())) { await something(); console.log(n); } await asyncRecursive(limit); })();
Как написано в описании циклов, с await может работать только for ofВ каком описании? С await прекрасно работает классический for.
function sleep(delayms) { return new Promise((resolve) => setTimeout(() => resolve(), delayms)); } async function foo() { for (i = 0; i < 10; i += 1) { await sleep(1000); console.log(i); } return 'done'; } await foo(); // 0 // 1 // ... // 9 // "done"