首页 > 解决方案 > 执行超时功能后是否有可能注入任何东西

问题描述

例如,我们有这样的代码,

    let a = 0;
    setTimeout(()=>{a++},0);
    console.log(a);

据我了解,超时回调中的所有内容都将在执行所有调用堆栈函数后执行,然后 timeoutCallback 才会从“队列”进入执行堆栈。

我的问题:是否有可能在执行超时函数并从超时回调中得到结果后注入任何东西?(无需等待所有执行堆栈为空)

像这样的东西:

    let a = 0;
    setTimeout(()=>{a++},0);
    console.log(a);  // 0
    //some mystery things happened
    console.log(a); // 1

标签: javascriptasynchronoussettimeout

解决方案


一旦将代码发送到超时队列,您就无法将其从超时队列中取回。相反,将代码移动到处理函数中并将其发送到超时队列。然后您可以将 setTimeout 保存为变量,稍后您可以在超时触发之前终止超时并立即运行该函数。

let a = 0
function timeoutHandler() {
  a++
  console.log("Counted to " + a)
}

var timeout = setTimeout(timeoutHandler,10000)

clearTimeout(timeout)
timeoutHandler()


推荐阅读