You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让独立文件中的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:35:27