Firebase get()方法函数内无法返回数据问题咨询
解决Firebase get()方法无法在函数中返回数据的问题
你的问题核心是异步操作的返回值处理:get()是异步方法,你当前代码里then()中的return只是在回调内部生效,并不会让外层的readAccount函数返回数据——因为异步操作还没完成时,外层函数已经执行结束了。
要让函数能返回数据,你需要让readAccount返回一个Promise,把异步操作的结果通过Promise传递出去。
修改后的代码
function readAccount(userId) { const dbRef = ref(getDatabase()); // 注意:路径里的冒号是多余的,修正为正确的路径格式 return get(child(dbRef, `users/${userId}/bank/credit`)).then((snapshot) => { if (snapshot.exists()) { console.log(snapshot.val()); return snapshot.val(); // 这个值会成为Promise的resolved结果 } else { console.log("No data available"); return null; // 无数据时返回null,也可以根据需求抛出错误 } }).catch((error) => { console.error(error); throw error; // 将错误抛出,让调用者可以捕获处理 }); }
如何调用这个函数
你可以通过两种方式获取返回的数据:
方式1:使用async/await(更简洁)
async function getAccountData(userId) { try { const creditData = await readAccount(userId); // 在这里使用获取到的数据 console.log("返回的账户数据:", creditData); } catch (error) { // 处理错误 console.error("获取数据出错:", error); } } // 调用示例 getAccountData("你的用户ID");
方式2:使用then/catch
readAccount("你的用户ID") .then(creditData => { console.log("返回的账户数据:", creditData); }) .catch(error => { console.error("获取数据出错:", error); });
额外注意点
你原代码中的路径users/${userId}/bank:/credit多了一个冒号,这会导致Firebase找不到正确的节点,已经在修改后的代码里修正为users/${userId}/bank/credit。
内容的提问来源于stack exchange,提问作者Gaspard LB
相关产品推荐
相关产品推荐

