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

JS Promise中resolve/reject传递的额外参数在then/catch中显示undefined的问题求助

JS Promise中resolve/reject传递的额外参数在then/catch中显示undefined的问题求助

嘿,我来帮你捋捋这个问题!你遇到的undefined情况其实是Promise的基础特性导致的:resolve和reject方法只能接受单个参数作为传递的值,你后面跟着的第二个参数ch会被直接忽略,所以在then和catch的回调里自然拿不到它啦。

先看你代码里的核心问题点:

// 这里传了两个参数,但第二个ch会被Promise直接忽略
resolve("Hello World",ch);
// 同理,这里的ch也传不进catch回调
reject("Error Occurred!!!",ch);

另外还要提一句,你代码里的Math. Random()多了个空格,正确写法是Math.random(),这个语法错误会导致代码直接报错,得先修正哦。

那怎么解决呢?很简单,把需要传递的多个数据包装成一个对象(或者数组),这样就能把所有信息一次性传递给回调函数了。修改后的代码如下:

const myPromise = new Promise((resolve, reject) => {
  // 修正Math.random的语法错误
  let ch = Math.random() > 0.5;
  setTimeout(() => {
    if(ch) {
      // 把消息和ch包装成对象传递
      resolve({ message: "Hello World", chanceResult: ch });
    } else {
      // 错误信息也用对象打包
      reject({ message: "Error Occurred!!!", chanceResult: ch });
    }
  }, 2000);
});

myPromise.then((result) => {
  console.log(result.message);
  console.log(result.chanceResult);
}).catch((error) => {
  console.log(error.message);
  console.log(error.chanceResult);
});

这样修改后,你就能在then和catch里同时拿到消息和随机判断的结果ch了。本质原因是Promise的设计就是只传递单一值,多数据就得用容器(对象/数组)来打包~

备注:内容来源于stack exchange,提问作者Varad Mudgal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 08:10:27