gpt4 book ai didi

javascript - 为什么解析消息首先出现?

转载 作者:可可西里 更新时间:2023-11-01 02:25:08 26 4
gpt4 key购买 nike

我正在努力思考 JavaScript 中的 promise 。我有一种错觉,一旦一个 Promise 被解决,它就永远不会回到被拒绝的状态。为了测试我写了一个小脚本。我看到返回的第一条消息是解析消息“1 resolve 2”等。我预计第一条消息是“0 reject 1”。

for (let i = 0; i < 10; i++) {
let p = new Promise((resolve, reject) => {

let a = 1 + (i % 2)

if (a === 2) {
resolve(i + ' resolve ' + a)
} else {
reject(i + ' reject ' + a)
}
})

p.then((message) => {
console.log(message)
}).catch((message) => {
console.log(message)
})
}

在控制台:

[Log] 1 resolve 2
[Log] 3 resolve 2
[Log] 5 resolve 2
[Log] 7 resolve 2
[Log] 9 resolve 2
[Log] 0 reject 1
[Log] 2 reject 1
[Log] 4 reject 1
[Log] 6 reject 1
[Log] 8 reject 1
< Promise {status: "pending"}

谢谢你的帮助....

看完之后

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

我得到了这段代码。渔获物已移除。

for (let i = 0; i < 10; i++) {
let p = new Promise((resolve, reject) => {

let a = 1 + (i % 2)

if (a === 2) {
resolve(i + ' resolve ' + a)
} else {
reject(i + ' reject ' + a)
}

})

p.then((message) => {
console.log(message)
}, failed => {
console.log(failed)
})
}

在控制台:

[Log] 0 reject 1
[Log] 1 resolve 2
[Log] 2 reject 1
[Log] 3 resolve 2
[Log] 4 reject 1
[Log] 5 resolve 2
[Log] 6 reject 1
[Log] 7 resolve 2
[Log] 8 reject 1
[Log] 9 resolve 2
< Promise {status: "pending"}

最佳答案

您可以使用浏览器开发工具的控制台查看幕后发生的事情,并可能设置断点(如果您使用 ChromeFirefox,本文可能会有所帮助):

enter image description here

如您所见,所有 10 个 promise 都是在执行(解决/拒绝)之前创建的。

有趣的是,在您的代码中,首先处理已解决的 promise 。

如果您在两个单独的定义中定义处理程序,您将获得预期的结果:

p.then((message) => {
console.log(message)
})
p.catch((message) => {
console.log(message)
})

输出:

enter image description here

关于javascript - 为什么解析消息首先出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55734046/

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