JavaScript使用await后仍无法提取Promise返回值该如何解决
问题解答
现有代码的问题
你当前的实现逻辑没有错误,只是取值方式不对:
async函数执行后默认返回Promise对象,你直接将fetchData()的返回值赋值给result变量,拿到的是处于pending状态的Promise实例,而非函数内部return的数组值。你打印时看到的fulfilled状态和value是控制台异步更新的结果,同步代码中无法直接读取该value属性。
正确的取值方式
有两种常用的取值方案:
方案1:在async执行上下文中使用await读取
如果你可以在async函数内处理数据,直接用await等待Promise执行完成即可拿到返回值:
async function fetchData() { try { var params = { Key: { chart_name: "cambridge_rent" }, TableName: "charts" }; const data = await docClient.get(params).promise(); return data.Item.values; } catch (err) { console.log("Failure", err.message); // 可选:抛出错误让上层捕获处理 // throw err } } async function processData() { const result = await fetchData(); // 此处可正常操作数组 console.log(result.length); // 输出95 console.log(result); // 目标数组 } processData();
方案2:通过Promise的.then回调读取
如果不方便在async函数内处理,用then回调获取执行结果:
fetchData().then(result => { // 回调内部即可拿到数组做后续处理 console.log(result.length); // 所有依赖该数组的逻辑都写在这个回调范围内 }).catch(err => { // 额外补充错误捕获,避免未处理的Promise异常 console.error('数据处理失败', err); });
注意事项
- 你无法在全局同步代码中直接拿到这个异步返回的数组,所有依赖该数组的逻辑必须放在await之后或者.then回调内部
- 你原有fetchData的catch分支会返回undefined,建议要么抛出错误让上层处理,要么返回默认空数组做兜底,避免后续调用时出现值为undefined的异常
内容的提问来源于stack exchange,提问作者mmz
相关产品推荐
相关产品推荐

