例如,我们有这样的代码
DB::raw('gender')
据我所知,超时回调中的所有内容都将在所有调用堆栈函数都将被执行后执行,然后timeoutCallback才会从“队列”进入执行堆栈。
我的问题: 执行超时功能后是否有可能注入任何东西并从超时回调中获取结果? (无需等待所有执行堆栈将为空)
类似这样:
let a = 0;
setTimeout(()=>{a++},0);
console.log(a);
答案 0 :(得分:0)
一旦代码被发送到超时队列中,就无法将其取回。而是将代码移到处理函数中,然后将其发送到超时队列。然后,您可以将setTimeout另存为变量,稍后可以取消触发超时,然后立即运行该函数。
let a = 0
function timeoutHandler() {
a++
console.log("Counted to " + a)
}
var timeout = setTimeout(timeoutHandler,10000)
clearTimeout(timeout)
timeoutHandler()
答案 1 :(得分:0)
执行超时功能后是否有可能注入任何东西
这是一个安全性/不变性问题吗?因为您对变量a
的引用是闭包的示例,可以在多个位置进行修改。
let a = 0;
setTimeout(()=>{a++},0);
console.log(a); // 0
a++ //some mystery things happened (ie Closures)
console.log(a); // 1
如果您要保持a
不受代码其他部分的无意影响,请使用不可变标识符(即const
)或使用高阶函数传递递增的值。