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

Firebase云函数中两层async/await包裹下Axios仍返回pending promise问题

问题根因及修复方案

1. 错误调用axios响应方法

axios请求成功后的返回对象没有json()方法,该方法属于浏览器原生fetch API。axios的响应数据直接存放在data属性中,你调用不存在的res.json()会导致返回未决议的Promise,甚至抛出未捕获异常,这是你得到pending状态Promise的直接原因。

2. 未主动结束HTTP请求

Firebase HTTP触发的云函数要求必须主动调用res对象的send/json/end等方法返回响应,否则函数会一直等待响应输出,直到触发默认超时阈值,这也是你设置的runWith超时不生效、函数长时间挂起的核心原因。

3. 冗余await

你已经通过await fetchData()拿到了返回结果,后续console.log不需要再对data加await,属于冗余操作。


修复后代码

const axios = require('axios'); // 确保已经在项目依赖中安装axios

exports.getBitcoinPrice = functions
    .region("europe-west1")
    .runWith({ timeoutSeconds: 5 })
    .https.onRequest(async (req, res) => {
      console.log("here");
      try {
        const response = await axios.get("https://api.coindesk.com/v1/bpi/currentprice.json", {
          timeout: 2000,
        });
        // 直接取data属性即可获得解析完成的JSON数据
        const data = response.data;
        console.log(data);
        // 主动返回响应结束函数调用
        res.status(200).json(data);
      } catch (error) {
        console.error("请求失败:", error);
        res.status(500).send("接口请求出错");
      }
    });

额外说明

如果修改后还是出现早期日志不输出的情况,优先检查部署的云函数版本是否和本地代码一致,部分未结束的请求会导致日志缓冲延迟输出,主动返回响应后即可恢复正常。

内容的提问来源于stack exchange,提问作者crevulus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:15:07