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

如何解决从函数返回Firebase Realtime Database snapshot值时出现undefined的问题?

问题原因与解决方法

你的代码返回undefined有两个核心原因:

  1. get_details函数本身没有返回值,内部then回调里的return resp只是回调函数的返回值,并非get_details的返回值。
  2. Firebase Realtime Database的get方法是异步操作,无法同步获取结果,必须通过Promise机制处理。

修改后的代码方案

方案1:让函数返回Promise,用then处理结果

function get_details(){
  // 返回整个Promise链,让外部能接收异步结果
  return get(ref(db,"pay/0/0/")).then((snapshot) => {
      if (snapshot.exists()) {
          var resp = [];
          resp.push(snapshot.val());
          return resp;
      }
      // 处理数据不存在的场景,返回默认值
      return [];
  });
}

// 通过then回调获取异步结果
get_details().then(response => {
  console.log(response); // 此处可拿到正确数据
});

方案2:用async/await简化异步代码

async function get_details(){
  const snapshot = await get(ref(db,"pay/0/0/"));
  if (snapshot.exists()) {
      var resp = [];
      resp.push(snapshot.val());
      return resp;
  }
  return [];
}

// 调用时需用await,注意await只能在async函数内部使用
(async () => {
  let response = await get_details();
  console.log(response);
})();

关键说明

  • 异步操作的结果无法同步获取,必须通过then回调或await等待Promise完成。
  • 必须确保get_details返回Promise,外部才能正确接收异步执行后的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:45:39