mpe*_*pen 6 javascript promise
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'));Run Code Online (Sandbox Code Playgroud)
这是否保证按顺序打印"a,b,c,d"?
据我所知,"a"必须在"c"之前触发,"b"必须在"d"之前触发,但除此之外,JS解释器是否可以决定以不同的顺序执行余数?
事物排队的方式setTimeout就是队列。如果两个回调以相同的“延迟”排队,则先排队的回调将首先触发。
编辑:我最初没能理解OP的意图。
“分支”承诺是这里实际发生的事情。含义 - 第一组 then-able(对于 a 和 b)中引用的“then-able”将“同时”触发两个提供的回调,因为它们都引用相同的 Promise - 然而 - 棘手的一点是它们按照使用.then(...)解析 Promise 对象排队的顺序执行。
然后后续/后续回调按各自的顺序排队(c 和 d)。
直接回答这个问题:不。then-able 中的异步操作的性质可以是任何东西。然而,OP 的 then-ables 中提供的功能本质上是同步的,从而产生直观但完全误导的记录顺序。
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |