【发布时间】:2020-10-10 07:27:05
【问题描述】:
我正在尝试通过调用过滤数据并返回数据的函数来从 firebase 加载数据。
当我在主函数中调用此函数时,它返回“未定义”。我知道数据在那里(console.log(postsArray))打印数据,但我猜返回在加载数据之前执行。 我做错了什么?
calling_Function_in_Main = async () => {
const data = await FirebaseData ();
console.log(data);
};
FirebaseData 是我在主函数中调用的函数,用于加载数据并返回数据
let postsArrays=[];
const FirebaseData = async () => {
const getViewableLink = async (link) => { //some function };
const loadData = async () => {
const database = firebase.database();
const data = database.ref();
const loadProfile = data
.child('Posts')
.orderByChild('Active')
.equalTo(true)
.once('value', function gotData(data) {
Object.values(readInfo).forEach(async (element) => {
element.Option1Link = await getViewableLink(
preLink + element.Option1Link,
);
postsArray.push(element);
}
});
})
.catch((error) => {
console.log(error);
}
})
.then((postsArray) => {
console.log(postsArray);
return postsArray;
});
};
await loadData();
};
export default FirebaseSwipeData;
【问题讨论】:
-
尝试在你的
loadData函数结束时执行return loadProfile,否则你什么都不返回(未定义)。如果你返回一个承诺,你也可以摆脱async。 -
实际上你甚至不使用
loadProfile,你可以只使用return data.child('.....你的forEach(也需要重构,因为那也不会等待。 -
forEach 需要一个同步函数,使用 for 循环代替,forEach 不适用于异步代码
标签: javascript react-native asynchronous return-value es6-promise