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
相关产品推荐
相关产品推荐

