我正在尝试这段代码:
let with999 = Promise.resolve(999);
let returnCatch = with999
.catch(reason => {
console.log("catch: " + reason);
});
returnCatch.then(data => {
console.log("then: " + data);
});
当我突然意识到:
承诺with999已履行 因此 catch() 方法未执行< /strong>,但是,catch() 返回的 Promise(在本例中为 returnCatch)最终fulfilled,其值与 相同>with999.
所以,我的问题是,为什么 catch() 最终实现了 returnCatch 承诺?
我预计 returnCatch 会挂起(因为 catch() 未执行)并使用 then()< /code> 什么都不会发生。
同样的情况发生在“做相反的事情”,then() 拒绝一个承诺:
let rejected = Promise.reject(new Error('Ups!'));
let returnThen = rejected
.then(reason => {
console.log("then: " + reason);
});
returnThen.
catch(data => {
console.log("catch: " + data);
});
有人可以向我解释一下发生了什么事吗?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
代码与将 .then 和 .catch 链接到初始 Promise 相同。情况并非如此,为 catch 创建一个新变量需要将其拒绝,然后通过管道传递到下一个 then。
将其视为一次编写相同的语句而不使用多个变量,这样的行为会更有意义。由于 Promise 已解析,因此第一个 .then 将被执行,如果 Promise 被拒绝,则第一个 .catch 将被执行,无论顺序或声明它们或您使用多少个变量来执行此操作。
编辑: 此代码片段与上面的代码片段相同,传递的是相同的 Promise。
let with999 = Promise.resolve(999).catch(reason => { console.log("catch: " + reason); }).then(data => { console.log("then: " + data); });