@Pulychuk

Как сделать задержку в цикле for in в jQuery?

Есть некий объект с данными:
var contact = {
    "client": {
        "your-name":"Mark Denstri",
        "your-email":"denstri@gmail.com",
        "your-phone":"+118882332",
        "your-message":"Lorem ipsum dolor sit amet, consectetur adipiscing elit,",	
        },
    "client-2": {
        "your-name":"Mark Denstri",
        "your-email":"denstri@gmail.com",
        "your-phone":"+118882332",
        "your-message":"Lorem ipsum dolor sit amet, consectetur adipiscing elit,",	
        },
};

Есть цикл который проходит по этим данным и записывает их значеня в input:
for (var key in contact) {
 var obj = contact[key];
		 for (var prop in obj) {
		        $('[name="'+prop+'"]').val(obj[prop]);
		        console.log(key + " " + obj[prop]);
		    }  					      	   
	}

key это - "client-1", "client-2", "client-n".
Если я верно думаю то фактически к key нужно сделать некоторую задержку.
То есть, сначала данные в input должны записаться с client-1. После чего должна ити задержка, например на 1 мин, затем идет следующие шаг и записываются в input все значение с client-2. И так далее через определенный промежуток времени

Пример того что есть - jsfiddle
  • Вопрос задан
  • 992 просмотра
Решения вопроса 1
kshshe
@kshshe
Frontend developer
Так? Поменял ваш пример

Можно обернуть всю работу в асинхронную функцию, тогда вам будет доступна удобная работа с асинхронностью.
// Где-то выше
const delay = (ms) => new Promise((resolve) => {
	setTimeout(resolve, ms);
});

// Это уже в асинхронной функции
/*
   Можно вызвать в любом месте в асинхронной функции, тогда код, условно, 
   остановится там на 1000 миллисекунд и продолжится, когда Promise из delay зарезолвится
*/
await delay(1000);


Вот именно ваш случай:
const delay = (ms) => new Promise((resolve) => {
	setTimeout(resolve, ms);
});

(async () => {
  for (var key in contact) {
    var obj = contact[key];
    for (var prop in obj) {
      $('[name="'+prop+'"]').val(obj[prop]);
      console.log(key + " " + obj[prop]);
    }  			
    await delay(1000);
  }
})()
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Надо использовать setTimeout, вот пример, я сделал не для клиента, но ведь главное идея, правда)
https://jsfiddle.net/16nfdrq9/2/
Ответ написан
Комментировать
john36allTa
@john36allTa
alien glow of a dirty mind
Я бы сделал так
var keys = contact.keys(),
	i = 0;
function nextKey(){
	for (var prop in contact[keys[i]]) {
        $('[name="'+prop+'"]').val(obj[prop]);
        console.log(key + " " + obj[prop]);
    }
    if (++i < keys.length) setTimeout(nextKey, 60000);
}
nextkey();
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы