javascript中的SetTimeout()

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

在 setTimeout() 函数中给出时间间隔有什么意义? 尽管回调必须等待调用堆栈完全清空。

例如,如果我写这段代码。

setTimeout(()=>console.log("2 sec Timeout"),2000)

无法保证 2 秒后准确运行。如果有其他代码花费的时间超过 2 秒,setTimeout 回调将必须等待其他代码运行,然后才会运行超时代码。检查下面的例子。

var c= ()=>{
    setTimeout(()=>console.log("2 sec Timeout"),2000)
    console.log("c");
}
var d= ()=>{
    console.log("d");
    for (let index = 0; index < 10000000000; index++) {
    }
    console.log("End of for loop");
}
var e= ()=>{
    console.log("e");
    for (let index = 0; index < 10000000000; index++) {
    }
    console.log("End of for loop");
}
c()
d()
e()

这里setTimeout代码必须等待d()而不是e()完成之后才会执行setTimeout代码。

是否有其他方法可以在所需的时间间隔之后准确执行所需的代码。

javascript asynchronous callback settimeout
1个回答
0
投票

在 setTimeout() 函数中给出时间间隔有什么意义?

指定您想要的大致延迟。或者换句话说,给出代码应该运行多久的最低数字(虽然接受它可能会在之后运行)。

是否有其他方法可以在所需的时间间隔之后准确执行所需的代码。

不,因为 JavaScript 在每个领域运行一个线程*(非常松散,每个全局环境等),并且使用作业队列工作,一旦作业启动,它就会运行到完成并且不能被另一个作业中断。因此,由于在您提供的确切时间发生时可能正在运行另一项作业,因此无法准确地安排它。

也就是说,这通常不是一个问题,除非代码错误地假设超时将在确切的时间后发生。

© www.soinside.com 2019 - 2024. All rights reserved.