Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Вывод сообщений из массива с задержкой (https://javascript.ru/forum/dom-window/48040-vyvod-soobshhenijj-iz-massiva-s-zaderzhkojj.html)

SinteC 17.06.2014 15:36

Вывод сообщений из массива с задержкой
 
Будет массив, в который добавляются сообщения, пусть var messages = ['сообщение 1', 'сообщение 2']; нужно написать функцию, которая будет выводить поочередно все сообщения из массива с задержкой в 3-5 сек. Типа: сообщение 1 (3 сек таймаут, и выводится следующее и тоже с задержкой в 3 сек, и так, пока все не выведет). Вроде бы и просто, но не могу понять, как это без велосипеда реализовать.

рони 17.06.2014 16:24

SinteC,
таймер на 3 сек запускает функцию которая выдаёт 1 элемент массива -- если массив ещё содержит элементы функция запускает таймер -- смотри сначала

devote 17.06.2014 16:32

var messages = ['сообщение 1', 'сообщение 2'];
var interval = setInterval(function() {
  if (messages.length === 0) {
    clearInterval(interval);
  } else {
    // вывод сообщения
    console.log(messages.shift());
  }
}, 3000);

SinteC 22.06.2014 16:05

devote, твой код начнет работать после запуска спустя 3 секунды, а нужно, чтобы при вызове функции сразу выводилось первое сообщение, а последующие уже с интервалом. В этом и суть, что без велосипеда, видимо, не реализовать(

Erolast 22.06.2014 16:15

Ну добавь "console.log(messages.shift());" перед установкой таймера. Либо через setTimeout с рекурсией.

SinteC 23.06.2014 08:48

Все, всем спасибо, разобрался.

BETEPAH 23.06.2014 09:58

Цитата:

Сообщение от Erolast
Ну добавь "console.log(messages.shift());"

в старых IE это чревато ошибкой, если не запущена консоль.

devote 23.06.2014 10:11

Цитата:

Сообщение от BETEPAH
в старых IE это чревато ошибкой, если не запущена консоль.

это же вывод в консоль для примера... явно он будет текст выводить не в консоль.

BETEPAH 23.06.2014 10:19

devote,
сорри, не проснулся еще :)


Часовой пояс GMT +3, время: 02:48.