Задать вопрос
@akdes

Асинхронная обработка массива с таймером, почему не работает?

Привет всем.

Есть необходимость обработать асинхронно массив, с задержкой.
Сделал фиддл, который наглядно показывает проблему:
https://jsfiddle.net/akdes/20he422s/

По моей задумке с нулевой задержкой должно писать в консоль текст из первого массива "foo" и только через 2 секунды "bar"
Что я делаю не правильно? как решить проблему?

Заранее спасибо!
  • Вопрос задан
  • 319 просмотров
Подписаться 1 Оценить 3 комментария
Решения вопроса 1
Stalker_RED
@Stalker_RED
Все делается проще:
var items = [
{
  text: "foo",
  delay: 0
},
{
  text: "bar",
  delay: 2000
}];

printAsync();
function printAsync() {
  var delay = 0;
  items.forEach(item=>setTimeout(function() {
    console.log(item.text)
  }, item.delay))
}
https://jsfiddle.net/ddo259tv/

У вас в коде нет ничего асинхронного кроме вызова setTimeout, которому сто лет в обед. А смысл нового слова async из es8 вы не поняли.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@olezhenka
Такая рекурсивная функция пойдет?

var textArray  = [{
  "text": "foo",
  "delay" : "2000"
},
{
  "text": "bar",
  "delay" : "2000"
}];
(function one(i) {
	console.log(textArray[i].text);
  setTimeout(function() {
  	one(i+1);
  }, textArray[i].delay)
})(0);
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы