在.then回调中返回值时,函数getResult始终返回undefined的问题
问题原因分析
你的getResult函数存在两个核心问题,导致打印的result始终是undefined:
函数未返回异步操作的Promise对象
getResult内部调用了返回Promise的someAsyncFunction,但你没有把这个Promise(或者说整个then链)作为函数的返回值。JavaScript中,没有显式return的函数默认返回undefined,所以const result = getResult(11)拿到的自然是undefined。异步回调的return无法同步传递结果
你在then回调里写的return true/false,只是给这个then方法返回的新Promise设定了resolved值,并不是给getResult函数的返回值。异步操作的结果不会同步“穿透”到外层的同步代码里。
修复方案
第一步:让getResult返回Promise
修改getResult,把someAsyncFunction(...).then(...)整个返回出去(同时修复原代码里then回调缺少闭合括号的语法错误):
function getResult(param) { // 加上return,把Promise链返回给调用方 return someAsyncFunction(param).then((result) => { if (result == 1) { console.log('breakpoint 1'); return true; } else { console.log('breakpoint 2'); return false; } }); }
第二步:正确获取异步结果
因为getResult现在返回Promise,不能直接同步赋值后打印,需要用以下两种方式之一获取结果:
方式1:使用then链式调用
getResult(11).then(result => { console.log(result); // 这里才能拿到正确的true/false });
方式2:使用async/await(更简洁)
如果在async函数中调用:
async function fetchResult() { const result = await getResult(11); console.log(result); } fetchResult();
或者在支持顶层await的环境(如现代浏览器、Node.js模块)中直接使用:
const result = await getResult(11); console.log(result);
内容的提问来源于stack exchange,提问作者Kevin Tommy
相关产品推荐
相关产品推荐

