function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
let p = sleep(50);
p.then(() => console.log('a')).then(() => console.log('c'));
p.then(() => console.log('b')).then(() => console.log('d'));

这是否可以打印" a,b,c,d"按顺序?
据我所知," a"必须先解雇" c"和" b"必须在" d"之前解雇,但除此之外,JS解释器是否可以决定以不同的顺序执行余数?
答案 0 :(得分:1)
使用setTimeout
对事物进行排队的方式就是 - 队列。如果两个回调排队使用相同的延迟',则首先排队的回叫将首先触发。
编辑:我最初没有理解OP的用意。
'分支'承诺是这里实际发生的事情。意义 - 然后能够'在第一组the-ables中引用(对于a& b)将在同一时间触发两个提供的回调'因为它们都引用了相同的承诺 - 但是 - 棘手的是它们按照它们使用解析承诺对象的.then(...)
排队的顺序执行。
然后,以下/后续回调按其各自的顺序排列(c& d)。
直接回答这个问题:不可以。当时的异步行为的性质可以是任何东西。但是,OP的随后提供的功能基本上是同步的,从而产生了直观但完全误导性的记录顺序。
答案 1 :(得分:1)
据我所知,“a”必须在“c”之前开火,“b”必须在“d”之前开火
是的,那对certan来说太多了。
除此之外,JS解释器能否决定以不同的顺序执行余数?
取决于你问谁,但没有更多的保证可以使输出更具可预测性:
p
。一般情况下,如果您需要某个订单,请不要依赖任何调度算法,然后将其显式化。