NodeJS中await request返回请求body而非箭头函数返回值问题
解决
console.log(price)打印请求body而非包裹函数返回值的问题 嘿,我来帮你搞定这个问题!你在PromedioPonderado.js里遇到的这个情况,大概率是函数返回值传递错误或者异步操作没处理到位导致的,下面我给你拆解排查和解决的步骤:
先排查核心问题点
1. 检查包裹函数的return语句
首先找到你说的那个“包裹的函数”,看看它最后return的是什么——是不是不小心把请求的原始body返回了,而不是你计算后的结果?
举个典型的错误例子:
// 错误:返回了原始body,而非计算后的加权平均值 const calculatePromedioPonderado = (requestBody) => { // 这里写了加权平均的计算逻辑 const promedio = requestBody.items.reduce((sum, item) => sum + (item.valor * item.peso), 0) / requestBody.totalPeso; // 不小心return了body,而不是promedio return requestBody; }; const price = calculatePromedioPonderado(apiResponseBody); console.log(price); // 自然会打印请求的body
修正方法很简单:把return requestBody改成return promedio,确保函数返回的是你想要的计算结果。
2. 检查是否涉及异步操作
如果你的包裹函数里包含网络请求(比如fetch、axios)这类异步操作,那直接赋值给price并打印,大概率拿到的是Promise对象,或者如果处理不当,会把未解析的body打印出来。
错误示例(异步函数没正确处理):
// 错误:异步函数没正确return结果,也没使用await获取值 const getPromedioPonderado = () => { fetch('/api/datos') .then(res => res.json()) .then(body => { const promedio = body.items.reduce((sum, item) => sum + (item.valor * item.peso), 0) / body.totalPeso; return promedio; // 这里的return只在then回调里生效,外层函数没返回这个值 }); }; const price = getPromedioPonderado(); console.log(price); // 打印undefined,或者如果外层return了fetch,会打印Promise
修正方法:确保异步函数返回完整的Promise链,并且用await或者.then()获取最终结果:
// 正确写法1:用async/await const getPromedioPonderado = async () => { const res = await fetch('/api/datos'); const body = await res.json(); const promedio = body.items.reduce((sum, item) => sum + (item.valor * item.peso), 0) / body.totalPeso; return promedio; // 返回计算后的结果 }; // 调用时要在async函数里用await async function logResult() { const price = await getPromedioPonderado(); console.log(price); // 现在会打印加权平均值 } logResult(); // 正确写法2:用.then链式调用 getPromedioPonderado().then(price => { console.log(price); // 同样能拿到正确的返回值 });
快速排查小技巧
在console.log(price)之前加一行console.log(typeof price, price),看看输出的类型:
- 如果是
object且结构和请求body一致:说明函数返回了body,检查return语句 - 如果是
object Promise:说明是异步操作没处理,需要用await/.then - 如果是
number/string但不是你想要的值:检查计算逻辑是否正确
内容的提问来源于stack exchange,提问作者Vallo
相关产品推荐
相关产品推荐

