javascript - 执行超时功能后是否有可能注入任何东西
问题描述
例如,我们有这样的代码,
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
解决方案
一旦将代码发送到超时队列,您就无法将其从超时队列中取回。相反,将代码移动到处理函数中并将其发送到超时队列。然后您可以将 setTimeout 保存为变量,稍后您可以在超时触发之前终止超时并立即运行该函数。
let a = 0
function timeoutHandler() {
a++
console.log("Counted to " + a)
}
var timeout = setTimeout(timeoutHandler,10000)
clearTimeout(timeout)
timeoutHandler()
推荐阅读
- java - 约束满足有效解的特例
- php - 使用正则表达式替换多行
- swift - 类型“Workers.Type”没有下标成员集合视图错误
- ms-access - VBA 使用全局变量在 Access 2010 中打开表单的多个实例
- laravel - Ansible 命令循环修改字符串值并将原始值推入新数组
- webpack - Webpack 4 dev-server 代理无法识别通配符
- php - 如何在没有结束标签的自定义动态 html 标签之间获取文本
- r - 伽马分布的 fitdist 错误
- hibernate - 在 SpringBoot 2.0.4 应用程序中刷新之前保存瞬态实例
- php - 如何在 Laravel 5.6 中提交之前显示表单数据以供预览