then(onFulfilled, undefined) - then(undefined, onRejected) - 为什么catch() 会履行返回的promise?
P粉446800329
P粉446800329 2024-03-30 23:21:22
[JavaScript讨论组]

我正在尝试这段代码:

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);
});

有人可以向我解释一下发生了什么事吗?

P粉446800329
P粉446800329

全部回复(1)
P粉111627787

代码与将 .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);
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号