You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TS中Promise问题:为何.then未打印参数222?

问题解答:Promise的then回调未执行的原因

嘿,我来帮你搞明白这个问题~你遇到的核心问题是对Promise构造函数的执行器(executor)函数的工作逻辑理解有误,咱们一步步拆解:

1. 为什么你的代码只打印了1?

你写的Promise构造函数里的执行器是:

(()=>{console.log(1); return 222;})

这里有个关键误区:Promise的执行器函数不是靠return来传递值给后续的then回调的。执行器的返回值会被Promise完全忽略,不管你return什么,都不会改变Promise的状态,也不会把值传递给then。

你的这个Promise从创建开始就一直处于pending(等待)状态,因为你从来没有调用过执行器的第一个参数——resolve函数,所以后续的then回调永远不会被触发,自然也就不会打印222了。

2. 修正后的代码

要让then拿到值并执行回调,你需要调用resolve函数来把值传递出去,同时将Promise的状态改为fulfilled(已完成):

const p: Promise<number> = new Promise<number>((resolve) => {
  console.log(1);
  resolve(222); // 用resolve传递值,改变Promise状态
}).then((data) => {
  console.log(data); // 现在会打印222
  return 43;
});

运行这段代码,控制台会先打印1,然后打印222,和你预期的一致。

3. 再补充点Promise执行器的知识点

Promise构造函数的执行器格式是:

new Promise((resolve, reject) => {
  // 异步/同步操作
  // 操作成功时调用resolve(结果值)
  // 操作失败时调用reject(错误信息)
})
  • 执行器会在Promise创建时立即同步执行,所以你先看到了1的打印。
  • 只有调用resolve或reject,Promise的状态才会从pending切换到fulfilled或rejected,后续绑定的then/catch回调才会被触发。
  • resolve的参数会被传递给then的回调函数,reject的参数会被传递给catch的回调函数。

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:01:18