Edw*_*win 11 javascript es6-promise
我试图围绕JavaScript中的诺言进行整理。我当时的幻想是,一旦解决了诺言,就永远不会回到被拒绝的状态。为了测试我写了一个小脚本。我看到返回的第一条消息是解析消息“ 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)
})
}
Run Code Online (Sandbox Code Playgroud)
在控制台上:
[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"}
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助。
看完之后
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
我到了这段代码。catch子被删除。
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)
})
}
Run Code Online (Sandbox Code Playgroud)
在控制台上:
[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"}
Run Code Online (Sandbox Code Playgroud)
您可以使用浏览器开发工具的控制台来查看幕后发生的情况,并可能设置断点(如果您使用的是Chrome或Firefox ,本文可能会有所帮助):
正如您所看到的,所有 10 个 Promise 都是在执行其中任何一个之前创建的(解决/拒绝)。
有趣的是,在您的代码中,首先处理已解决的承诺。
如果您在两个单独的定义中定义处理程序,您将获得预期的结果:
p.then((message) => {
console.log(message)
})
p.catch((message) => {
console.log(message)
})
Run Code Online (Sandbox Code Playgroud)
输出:
归档时间: |
|
查看次数: |
398 次 |
最近记录: |