setTimeout(funcA, 0)
this.setState() //react async call
setTimeout(funcB, 0)
对于上面的代码,执行的顺序是funcA
>更新到this.state> funcB
?
AFAIK,Javascript没有多线程,因此asyn调用只是被推入队列。这只是一个FIFO队列还是优先级队列?
答案 0 :(得分:1)
setTimeout()
是一种在调用堆栈清空时推迟任务的方法。
这意味着在执行以下代码时:
setTimeout(funcA, 0)
this.setState() //react async call
setTimeout(funcB, 0)
funcA
已添加到任务队列this.setState
添加到调用堆栈并立即执行并返回funcB
已添加到任务队列因此,只有this.setState()
立即被调用,funcA
,funcB
将被添加到有序任务队列中,因此它们将被调用 in为了
据我了解,从spec开始,它是一个FIFO队列。
答案 1 :(得分:0)
您不能依赖于微任务的排序。如果您想强制执行订单,并假设funcA
是同步的,那么
setTimeout(() => {
funcA();
this.setState().
.then(funcB);
});