从异步函数返回数据反应本机 Firestore

时间:2021-04-07 04:36:02

标签: react-native google-cloud-firestore async-await

我在从异步函数返回数据时遇到问题,似乎 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() 完成之前被触发,就好像等待没有等待一样。

你能帮我找出我做错了什么吗?

预先感谢您的帮助!

1 个答案:

答案 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())
};


相关问题