readNotes函数返回pending状态Promise,但已获取keys值的技术问题
问题分析与解决办法
你的readNotes函数存在两个关键问题:
- 当数据库快照不存在时,仅打印日志但未调用
resolve或reject,导致Promise始终处于pending状态 - 变量
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
相关产品推荐
相关产品推荐

