@mike_aw

Перебор всех элементов с заданным интервалом времени?

Имеется объект OBJ, у которого есть свойства 'a', 'b', 'c', 'd'. Каждое свойство является массивом объектов (длина массивов различная). Задача - выводить в консоль name + surname с интервалом timeout начиная с первого OBJ["a"][0] и заканчивая самый последним. Все должно работать на ноде.
Не смог самостоятельно разобраться с работой setTimeout и setInterval в данном случае.

Структура объекта примерно такая
var OBJ = {
"a": [
{name: "Коля",
surname: "Петров"},
{name: "Вася",
surname: "Иванов"},
{name: "Сережа",
surname: "Смирнов"}],
"b": [
{name: "Вова",
surname: "Михайлов"},
{name: "Никита",
surname: "Кузнецов"},
{name: "Вадим",
surname: "Панов"}]
}

var timeout = 1000;
  • Вопрос задан
  • 618 просмотров
Решения вопроса 1
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
$ node -v
v7.6.0

// demo.js
function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

const OBJ = {
	"a": [
		{name: "Коля",
		surname: "Петров"},
		{name: "Вася",
		surname: "Иванов"},
		{name: "Сережа",
		surname: "Смирнов"}
	],
	"b": [
		{name: "Вова",
		surname: "Михайлов"},
		{name: "Никита",
		surname: "Кузнецов"},
		{name: "Вадим",
		surname: "Панов"}
	]
};

const timeout = 1000;

async function demo() {
	for(let prop in OBJ) {
		for(let i = 0; i < OBJ[prop].length; i++) {
			console.log(`${OBJ[prop][i].name} ${OBJ[prop][i].surname}`);
			await sleep(timeout);
		}
	}
}

demo();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dummyman
@dummyman
диссидент-схизматик
Вам надо создать промис, и, перечислить все значения

Obj['a'].forEach(val => p.then(logstdout(val)))

тогда сама функция будет выглядеть приблизительно так:
function logstdout(val) {
   return function(cb){
      console.log(val);
      setTimeout(cb, 1000);
   }
}
Ответ написан
Ваш ответ на вопрос

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

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