Node.js同文件函数调用问题:异步函数返回值无法获取
解决Node.js中函数间异步结果传递的问题
问题根源
Function1没有返回异步操作的Promise链,调用时默认返回undefined- 调用函数时写错了名称:
function1()应该是Function1()(注意大小写) - 异步操作的结果无法同步获取,必须通过Promise的
.then()或async/await处理
修正代码
首先调整Function1,让它返回完整的Promise链:
// 修正后的Function1 const Function1 = (req, res) => { // 建议将require移到文件顶部,避免重复引入 const axios = require('axios'); const config = { method: 'get', url: 'xxxxx.json', headers: { // ... } }; // 返回整个axios请求的Promise链 return axios(config) .then(response => { const array = response.data.datas; // 原代码的Promise.all多余,直接返回id数组即可 return Object.values(array).map(entry => entry.id); }) .catch(error => { console.log(error); // 捕获错误后重新抛出,让调用方感知异常 throw error; }); }
方法1:用.then()处理异步结果
const Function2 = (req, res) => { Function1(req, res) .then(previousResult => { console.log(previousResult); // 正常获取结果 // 后续业务逻辑写在这里 }) .catch(error => { // 处理Function1抛出的错误 }); }
方法2:用async/await简化异步逻辑
const Function2 = async (req, res) => { try { const previousResult = await Function1(req, res); // 等待Promise完成 console.log(previousResult); // 正常获取结果 // 后续业务逻辑 } catch (error) { console.log(error); // 处理错误 } }
额外提示
- 尽量将
require('axios')放在文件最顶部,不要在函数内部重复引入模块 - 原代码中的
Promise.all属于冗余操作,因为map返回的是普通id数组而非Promise数组,无需用Promise.all包裹
内容的提问来源于stack exchange,提问作者Arthur Fortin
相关产品推荐
相关产品推荐

