gpt4 book ai didi

javascript - 在 node.js 中流水线化 setTimeout

转载 作者:搜寻专家 更新时间:2023-11-01 00:37:59 25 4
gpt4 key购买 nike

我正在编写一个 node.js 控制台应用程序。我有两个 setTimeout 函数,如下所示。

setTimeout(function(){
process.stdout.write('\n\nJokes Apart !!!\n\n');
}, 2000);

setTimeout(function(){
process.stdout.write('\n\nLet\'s play a game !!!\n\n');
}, 1000);

我的实际意图是,第一条消息应该在 2 秒后出现。之后,第二条消息应在 1 秒后出现。但实际情况是,第二条消息在 1 秒后出现,然后第一条消息出现。这两个函数被同时调用,因为它们是异步的。有什么方法可以通过管道传输它们吗?

最佳答案

setTimout() 在 Javascript 中没有阻塞。所以,您所做的是安排两个计时器在未来运行。从现在开始运行 1 秒。另一个从现在开始运行两秒。因此,您得到了您观察到的行为。

您可以安排第一个从现在开始运行 2 秒,然后安排一个在 1 秒后运行,您可以安排它从现在开始运行 3 秒。

setTimeout(function(){
process.stdout.write('\n\nJokes Apart !!!\n\n');
}, 2000);

// schedule this one to be 3 seconds from now, which will be 1 second after the prior one
// since that one fired in 2 seconds
setTimeout(function(){
process.stdout.write('\n\nLet\'s play a game !!!\n\n');
}, 3000);

或者,您可以安排第一个从现在开始运行 2 秒,然后在该回调中,您可以安排下一个从第一个触发后 1 秒运行。

setTimeout(function(){
process.stdout.write('\n\nJokes Apart !!!\n\n');
// when the first timer fires, set a new timer to run the second
// part one second from when the first one fired
setTimeout(function(){
process.stdout.write('\n\nLet\'s play a game !!!\n\n');
}, 1000);
}, 2000);

正是这种非阻塞特性赋予了 Javascript 异步行为。当您调用第一个 setTimeout() 时,Javascript 解释器不会停止并等待计时器触发。相反,它安排该计时器在未来的某个时间运行,然后继续执行您的 Javascript 的其余部分。在您的代码中,下一行代码是另一个 setTimeout() 因此它也会立即安排该计时器。由于它们是同时安排的,因此安排 2 秒后的安排在安排 1 秒后的安排是有道理的。

因此,您最终有两个选择。您可以更改第二次的时间以使其在您希望它触发时触发(假设安排两个计时器的代码基本上同时运行)或者您可以更改何时您安排第二个计时器,直到第一个计时器触发。

关于javascript - 在 node.js 中流水线化 setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44911980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com