@MishaXXL

Как запустить цикл for of для длинны массива?

Нужно в цикл for засунуть ожидание await
Как написано в описании циклов, с await может работать только for of
Но в моем случае у меня не массив, а количество раз, сколько он должен использоваться.
Можно как-то без создания доп. массива заставить сработать for of определенное количество раз или как в обычный цикл for поместить ожидающую операцию await?
  • Вопрос задан
  • 239 просмотров
Решения вопроса 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
Обычный цикл чем не цикл?
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'));
Ответ написан
Комментировать
@historydev Куратор тега JavaScript
Валера, настало твоё время
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);
})();
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Как написано в описании циклов, с 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"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы