gpt4 book ai didi

javascript - 当调用不同的resolve时执行有关promise的命令

转载 作者:行者123 更新时间:2023-12-03 03:22:11 25 4
gpt4 key购买 nike

我对 Promise 中的 resolve 感到困惑。

resolveinnerResolve 之前调用,但为什么在 chrome 控制台中“inner Promise thenexecute”会先于“Promise thenexecute”被记录。

我认为可能是这样的:

当 Promise 的状态为 PENDING 时,调用 resolve 只需将状态设置为 FULFILLED,当调用 then 方法时,作业将排队到 jobQueue 中。innerPromise.then 首先被调用,因此作业首先排队。

这个问题有规范的解释吗?

这是我的代码:

console.log("main start")
new Promise(resolve =>{
new Promise(innerResolve =>{
resolve()
console.log("resove is called")
innerResolve()
console.log("innerResolve is called")
}).then(() => {
console.log('inner Promise then execute')
})
}).then(() => {
console.log('Promise then execute');
})
console.log("main end")

最佳答案

resolve()则不调用 then方法。调用resolve()是排队的 then方法在下一个tick之后调用,因此整个内部 promise 解析器将在内部 then 之前立即执行方法,然后是外层then方法将在下一个时钟周期按该顺序调用,因为在链接外部 Promise 之前,内部 Promise 会同步链接到外部 Promise 内。

我添加了另外两个日志来帮助阐明为什么 then 的顺序方法与您预期的不同:

console.log("main start")
new Promise(resolve =>{
console.log("outer resolver execute")
new Promise(innerResolve =>{
resolve()
console.log("resove is called")
innerResolve()
console.log("innerResolve is called")
}).then(() => {
console.log("inner Promise then execute")
})
console.log("inner promise chained")
}).then(() => {
console.log("Promise then execute");
})
console.log("main end")

关于javascript - 当调用不同的resolve时执行有关promise的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46520927/

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