我有一个来自 Firebase 的 getData 函数和 onValue 函数。但是当我调用它时,它不会等待 onValue 完成,结果会返回 undefined。
这是getData函数:
function getData(path) {
try {
const reference = ref(database, path);
onValue(reference, (snapshot) => {
const data = snapshot.val();
console.log('DATA: ' + data);
return data;
}, (error) => {
console.error(error);
return undefined;
});
} catch (error) {
console.error(error);
return undefined;
}
console.log('END!');
}
当我调用该函数时,控制台如下所示:
END!
DATA: *[correct data]*
我已经尝试将其设为变量而不是函数。 有人知道我如何让它等待 onValue 完成。
如果您只想获取一次值,则应该使用
get()
而不是 onValue
。
function getData(path) {
try {
const reference = ref(database, path);
return get(reference).((snapshot) => {
const data = snapshot.val();
console.log('DATA: ' + data);
return data;
}, (error) => {
console.error(error);
return undefined;
});
} catch (error) {
console.error(error);
return undefined;
}
console.log('END!');
}
所有日志记录使该功能比所需的复杂得多,因此提炼其本质是:
function getData(path) {
const reference = ref(database, path);
return get(reference).((snapshot) => snaphot.val());
}
我也遇到了同样的情况,通过阅读这篇文章找到了解决方案: https://github.com/firebase/firebase-js-sdk/issues/6941
总之,我必须更改这段代码
let results = [];
onValue(documentRef, (snapshot) => {
const data = snapshot.val();
results.push(data);
}
return data;
对于另一个
let results = [];
onValue(documentRef, (snapshot) => {
if(snapshot.exists()){
snapshot.forEach((doc) => {
let item = doc.val();
item.key = doc.key;
results.push(item);
});
}
}
return results;
希望有帮助:)