我试图理解 promise ,但在这里有点困惑。我正在玩不同的场景,我会叠加其中的一个。为什么 letthird = function()
不等待 let Second = function()
停止计数?
let first = function () {
return new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('first');
resolve()
}, 3000)
})
}
let second = function () {
return new Promise(function (resolve, reject) {
let iter = 7
console.log(iter);
for (let i = 0; i <= iter; i++) {
(function(n) {
setTimeout(function(){
console.log('hi');
console.log(n);
}, 400 * i);
}(i)*i);
}
console.log('seco');
resolve();
})
}
let third = function() {
return new Promise(function (resolve, reject) {
console.log('thir');
resolve()
})
};
let scenario = function() {
first()
.then(() => second())
.then(() => third())
}
scenario()
最佳答案
@johnnybigH, 第二个函数解析超出了超时时间,因此从技术上讲,它不会等待超时函数完成,因为您正在解决 setTimeout 之外的问题。现在第二个函数已解决,因此将执行第三个函数。 您可以做的是循环的第二个函数内部。查找最后一次迭代并解析结束函数。
for (let i = 0; i <= iter; i++) {
(function(n) {
setTimeout(function(){
console.log('hi');
console.log(n);
if(i == iter) resolve();
}, 400 * i);
}(i)*i);
}
关于Javascript Promises 并不像我期望的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57964796/