JS Не могу разобраться с синхронностью [дубликат]

104
04 октября 2019, 12:30

На данный вопрос уже ответили:

  • Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания 3 ответа
  • Как последовательно вызвать асинхронную функцию с коллбеками? 2 ответа

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

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); 
}
Answer 1

Можете использовать 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); 
  } 
}()

READ ALSO
Проблема с Slick Slider: скрипт задает огромную ширину слайдам

Проблема с Slick Slider: скрипт задает огромную ширину слайдам

В мобильной версии сайта элемент перестраивается в слайдер:

155
Ошибки в коде дискорд бота [закрыт]

Ошибки в коде дискорд бота [закрыт]

Показывает 6 ошибок но почему он их показывает у меня не получается понять не подскажете ли в чем здесь проблема?

121
Не запускается приложение на Node.js

Не запускается приложение на Node.js

Возникла проблема с приложением, написанным и тестированным на nodejs v4 и node

112