Promise with setTimeout - непонятна работа в цикле
Пытаюсь добиться последовательного выполнения внутри цикла
async function f(){
for (let index = 0; index < 3; index++) {
await new Promise(r => setTimeout(()=>{console.log("f")}, 2000));
console.log(index)
}
}
f();
// Результат выводит один раз f
Как добиться вывода?
f
0
f
1
f
2
Ответы (2 шт):
Автор решения: Алексей Шиманский
→ Ссылка
Надо не забывать, что промис должен быть либо разрешён (resolve) либо отклонён (reject). У вас нет как минимум одной этой важной детали.
async function f(){
for (let index = 0; index < 3; index++) {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("f"), 1000)
});
let result = await promise;
console.log(result)
console.log(index)
}
}
f();
async function f(){
for (let index = 0; index < 3; index++) {
await new Promise((resolve, reject) => {
setTimeout(() => {
console.log('f');
resolve();
}, 1000)
});
console.log(index)
}
}
f();
Автор решения: ksa
→ Ссылка
почему без создания переменной let promise, await не работал?
Он просто не заканчивался. В нем не вызывался ни resolve, ни reject
Вот - все работает и без переменной.
async function f(){
for (let index = 0; index < 3; index++) {
await new Promise(resolve => setTimeout(_ => {
console.log("f")
resolve()
}, 2000));
console.log(index)
}
}
f();