如何让独立文件中的Promise返回结果后再继续执行脚本?
问题解决:await未生效的原因及修复方案
核心问题
你在file b里直接用await但没生效,根源是**await只能在async标记的函数内部,或者支持顶层await的环境中使用**,当前file b的代码没包裹在async函数里,所以await不会起作用。
另外,file a的代码有冗余:axios.get本身就返回Promise,没必要手动再包一层new Promise,可以简化写法。
修复步骤
1. 优化file a的代码(可选但推荐)
去掉冗余的Promise包装,利用async函数和axios本身的Promise特性,代码更简洁易维护:
// file: a const axios = require('axios'); // 记得补上axios的引入,原代码遗漏了这一步 async function apiExchangerate(country, amount) { const response = await axios.get('', { // 这里填充你的实际请求URL headers: { "Accept-Encoding": "gzip,deflate,compress" }, }); const result = String(response.data.result).replace(/\..*/, ''); console.log('Processing Request'); return result; } module.exports = apiExchangerate;
2. 修复file b的await使用问题
方案一:将调用代码放在async函数中(通用兼容写法)
这是最稳妥的写法,适配所有支持async/await的环境:
// file: b const apiExchangerate = require('./a'); // 先引入目标函数 async function handleCurrencyRequest() { let request_currency = await apiExchangerate(country, amount); // 后续脚本写在这里,会等待Promise响应后再执行 console.log('拿到汇率结果后执行后续逻辑:', request_currency); } // 调用这个async函数触发流程 handleCurrencyRequest();
方案二:使用顶层await(Node.js v14.8+ 或 ES模块环境)
如果你的项目是ES模块(package.json中设置"type": "module"),或者Node.js版本足够新,可以直接在顶层使用await:
// file: b import apiExchangerate from './a'; // ES模块引入方式 let request_currency = await apiExchangerate(country, amount); // 后续脚本 console.log('拿到汇率结果后执行后续逻辑:', request_currency);
额外注意点
- 一定要确保正确安装并引入axios,否则会出现运行时错误。
- 建议用
try/catch包裹await代码,处理请求失败的情况:async function handleCurrencyRequest() { try { let request_currency = await apiExchangerate(country, amount); // 后续逻辑 } catch (error) { console.error('汇率请求出错:', error); } }
内容的提问来源于stack exchange,提问作者user20839242
相关产品推荐
相关产品推荐

