0

Допустим у меня есть массив который я перебираю:

array  = [
    'item1',
    'item2',
    ....
]

array.forEach((item,i) => { ... //getAnyThing() }

Например при переборе я вызываю метод в котором есть setTimeout():

getAnyThing() {
    let w = window.open('anyUrl') // Просто пример в моём непонимании...
    setTimeout(() => {
        w.close();
    },10000);
}

Сам вопрос: как во время перебора дождаться выполнения моего метода и только после этого следовать дальнейшему перебору?

array.forEach((item,i) => { 
     setTimeout(() => {
         this.getAnyThing();
     },10000); 
}
Oliver
  • 604

1 Answers1

2

Можете использовать async\await для этого.

array = [
  'item1',
  'item2',
  'item3',
]

async function getAnyThing() { await new Promise(resolve => { setTimeout(() => { resolve(); }, 1000); }); }

~async function() { for (let item of array) { await getAnyThing(); console.log(item); } }()

Grundy
  • 81,538
  • А у Вас этот код работает? – user220409 Feb 13 '19 at 09:04
  • @OlmerDale, в chrome работает. – Grundy Feb 13 '19 at 09:12
  • @Grundy я точно такой же ответ написал в jsbin но он у меня не заработал и пока я разбирался, дали этот ответ. Но меня удивило что и этот пример у меня не заработал. Хотя у меня тоже последний хром. И я даже начал сомневать в себе, пока на ноде не проверил :) – user220409 Feb 13 '19 at 09:22
  • @OlmerDale, здесь он точно работает, я включил сниппетовскую консоль - она выводит все как надо. Возможно код был не совсем такой, а чем-то отличался, можно задать новый вопрос: почему такой код не работает :) – Grundy Feb 13 '19 at 09:24
  • В Firefox тоже работает, если что – andreymal Feb 13 '19 at 09:28
  • @OlmerDale да, интересно будет посмотреть, как такой код может не работать и почему. Очень полезно! – Stepan Kasyanenko Feb 13 '19 at 11:07
  • Фиг его знает чтоэто было.. Я перед тем как у Вас спросил работает код или нет, специально нажал править Ваш ответ для того чтобы поставить в настройках песочницы компиляцию с помощью бабеля. Но даже после этого код не заработал. Но сейчас работает. У меня скорее всего хром на ubuntu тупит. При чем впервые вчара заметил. – user220409 Feb 13 '19 at 16:02