我得到了这段代码:
'use strict';
var total = 0;
console.log("Start of program - total is now: " + total);
setTimeout(function() {
console.log("function 1");
total += 10;
}, 500);
setTimeout(function() {
console.log("function 2");
total += 50;
}, Math.floor(Math.random() * 1000));
setTimeout(function() {
console.log("function 3");
total += 100;
}, Math.floor(Math.random() * 1000));
console.log("End of progam - total is now: " + total);
如何仅在执行完上面的所有超时后才运行最后一个 console.log?
最佳答案
有几种可能的方法来解决这个问题。如果您有时间,我建议您研究 Promises 并使用 Promise.all()。
但是,如果您坚持只使用原始回调,我会将 console.log 替换为以下内容:
var countTimeoutsFinished = 0;
function testEndOfProgram() {
if(countTimeoutsFinished === 3) {
console.log("End of program - total is now: " + total);
}
}
然后,在每个超时内,递增 countTimeoutsFinished 并调用 testEndOfProgram():
setTimeout(function() {
console.log("function 1");
total += 10;
countTimeoutsFinished++;
testEndOfProgram();
}, 500);
.当第 3 次超时完成时,countTimeoutsFinished 将为 3,然后当您进入 testEndOfProgram 时,console.log 将执行。
关于javascript - 在随机超时完成多个函数后,如何运行语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25731025/