Javascript:当我们有 setTimeout 时,逐行打印语句

问题描述 投票:0回答:2

我们一行中有 5 个语句,如果我们在第 3 个语句中设置了超时,它将在所有剩余语句执行完毕后执行。即使我们在代码之间设置了超时,我也希望逐行执行每个语句。

示例: 我们有一些声明

console.log("A");
setTimeout(console.log("B"), 1000);
console.log("C");

预期输出是A C B,但我想打印的是A B C。 对此有什么想法吗?

javascript settimeout
2个回答
0
投票

我认为你的 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()
})  


0
投票

你需要链接超时,像这样(将其视为概念证明,但它已经过测试)

<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>
© www.soinside.com 2019 - 2024. All rights reserved.