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

readNotes函数返回pending状态Promise,但已获取keys值的技术问题

问题分析与解决办法

你的readNotes函数存在两个关键问题:

  1. 当数据库快照不存在时,仅打印日志但未调用resolve或reject,导致Promise始终处于pending状态
  2. 变量user、ref、keys未用let/const声明,会成为全局变量引发意外问题

修正后的代码

function readNotes(){
  return new Promise((resolve, reject) => {
     const user = firebase.auth().currentUser.uid;
     const ref = database.ref(`users/${user}/notes`);
     ref.get().then(function(snapshot) {
         if (snapshot.exists()) {
              const keys = Object.keys(snapshot.val());
              console.log(keys);
              resolve(keys);
         } else {
             console.log("No data available");
             // 根据业务需求选择resolve或reject,示例返回空数组
             resolve([]);
             // 若需抛出错误可改用:reject(new Error("No data available"));
         }
     }).catch((error) => {
         reject(error);
     });
  });
}

正确调用方式

需要通过.then()或async/await处理Promise结果:

// 方式1:使用.then()
readNotes().then(keys => {
  console.log("获取到的笔记键值:", keys);
}).catch(err => {
  console.error("读取失败:", err);
});

// 方式2:使用async/await(需在async函数内执行)
async function fetchNotes() {
  try {
    const keys = await readNotes();
    console.log("获取到的笔记键值:", keys);
  } catch (err) {
    console.error("读取失败:", err);
  }
}
fetchNotes();

内容的提问来源于stack exchange,提问作者Calvin Clark jr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:45:42