Я пытаюсь сделать цикл, который срабатывает каждые 3 секунды, и пытаюсь сделать это с помощью Promises. Я не могу поместить return
в цикл, как показано ниже, поэтому я не знаю, как это сделать.
for (let x = 0; x < 4; x++) {
return new Promise(resolve => {
setTimeout(() => {
console.info("timeout")
resolve()
}, 3000)
});
};
Я почти уверен, что возврат в цикле выйдет из него после первой итерации.
Отвечает ли это на ваш вопрос? Что такое версия sleep() для JavaScript?
Будет ли setInterval
более подходящим?
Чтобы сделать это в цикле, вам нужно использовать await.
async function runIt() {
var start = Date.now()
for (let x = 0; x < 4; x++) {
await new Promise(resolve => {
setTimeout(() => {
console.info("timeout", x, Date.now() - start)
resolve()
}, 3000)
});
};
}
runIt();
Вам было бы лучше просто сделать рекурсивный вызов
function runIt(times, method, delay) {
var count = 0;
function next() {
method();
count++;
if (count < times) window.setTimeout(next, delay);
}
// next(); // If you want no delay for first iteration
window.setTimeout(next, delay);
}
function sayIt() {
console.info("hello");
}
runIt(4, sayIt, 3000);
Цикл совершенно неверен, если вы хотите использовать цикл, он потребует ожидания