gpt4 book ai didi

javascript - 这个 Promise 链保证按这个顺序执行吗?

转载 作者:数据小太阳 更新时间:2023-10-29 05:31:54 25 4
gpt4 key购买 nike

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 解释器能否决定以不同的顺序执行其余部分?

最佳答案

使用 setTimeout 进行排队的方式就是队列。如果两个回调以相同的“延迟”排队,则首先排队的回调将首先触发。

编辑:我最初没能理解 OP 的意图。

'分支' promise 是这里实际发生的事情。意思是 - 在第一组 then-ables(对于 a 和 b)中引用的 'then-able' 将在 '同时' 触发两个提供的回调,因为它们都引用相同的 promise - 然而 - 棘手的一点是它们按照使用解析 promise 对象的 .then(...) 排队的顺序执行。

然后后续/后续回调按各自的顺序(c 和 d)排队。

直接回答这个问题:不。then-able 中异步操作的性质可以是任何东西。然而,OP 的 then-ables 中提供的函数本质上是同步的,导致了直观但完全误导的日志记录顺序。

关于javascript - 这个 Promise 链保证按这个顺序执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41926937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com