我们一行中有 5 个语句,如果我们在第 3 个语句中设置了超时,它将在所有剩余语句执行完毕后执行。即使我们在代码之间设置了超时,我也希望逐行执行每个语句。
示例: 我们有一些声明
console.log("A");
setTimeout(console.log("B"), 1000);
console.log("C");
预期输出是A C B,但我想打印的是A B C。 对此有什么想法吗?
我认为你的 setTimout 不正确,因为它会立即执行 console.log。
要做你想做的事,你需要替换console和setTimeout
const myMessages = [];
const myConsole = window.console;
window.console = { log: (str) => myMessages.push(`mine: ${str}`) }
const myTimeout = window.setTimeout;
window.setTimeout = func => {
myMessages.push(func)
};
console.log("A");
setTimeout(() => console.log("B"), 1000);
console.log("C");
window.console = myConsole; // reset
myMessages.forEach(msg => {
if (typeof msg === "string") console.log(msg)
else msg()
})
你需要链接超时,像这样(将其视为概念证明,但它已经过测试)
<script>
var linesToPrint = ['A', 'B', 'C'];
function WriteNextLine(lineCount)
{ if (linesToPrint[lineCount] != undefined)
{ console.log(linesToPrint[lineCount]);
setTimeout(function(){WriteNextLine(++lineCount);}, 1000);
}
}
WriteNextLine(0);
</script>