如何解决从函数返回Firebase Realtime Database snapshot值时出现undefined的问题?
问题原因与解决方法
你的代码返回undefined有两个核心原因:
get_details函数本身没有返回值,内部then回调里的return resp只是回调函数的返回值,并非get_details的返回值。- 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
相关产品推荐
相关产品推荐

