我在从异步函数返回数据时遇到问题,似乎 await 不起作用。
我在下面有这个函数,它返回一些我推入“提醒”数组并返回它的数据。
getReminderData = async () => {
// Firestore data converter
const user = await UserRepository.getUserRef(
firebase.auth().currentUser.uid
);
let reminders = [];
const remindersRecord = await firebase
.firestore()
.collection("reminder")
.withConverter(ReminderConverter.getReminderConverter())
.where("user", "==", user)
.get();
remindersRecord.forEach(async (reminderDoc) => {
const data = await reminderDoc.data();
reminders.push(data);
console.log(reminders);
});
return reminders;
};
那我有
async componentDidMount() {
let remindersData = await this.getReminderData();
console.log(remindersData);
}
这里的问题是 console.log(remindersData) 没有显示正常的数据,因为这个控制台日志在 getReminderData() 完成之前被触发,就好像等待没有等待一样。
你能帮我找出我做错了什么吗?
预先感谢您的帮助!
答案 0 :(得分:0)
您的函数无需等待即可返回提醒
remindersRecord.forEach(async (reminderDoc) => {
const data = await reminderDoc.data();
reminders.push(data);
console.log(reminders);
});
forEach
创建新的作用域,外部作用域不会等待它。相反,试试这个
getReminderData = async () => {
// Firestore data converter
const user = await UserRepository.getUserRef(
firebase.auth().currentUser.uid
);
const remindersRecord = await firebase
.firestore()
.collection("reminder")
.withConverter(ReminderConverter.getReminderConverter())
.where("user", "==", user)
.get();
return remindersRecord.map(reminder => reminder.data())
};