在使用onSnapshot
回调时让调用firebase.firestore.set
的异步React函数等待,可以采用以下步骤:
getDataAndSet
的异步函数。getDataAndSet
函数中,首先使用onSnapshot
方法来监听Firestore文档的变化。onSnapshot
方法会返回一个取消监听的函数。onSnapshot
的回调函数中,你可以使用await
关键字来等待异步获取到的数据,并进行一些操作。例如,你可以使用await
关键字等待获取到的数据并将其存储在一个变量中。firebase.firestore.set
方法来更新Firestore中的数据。firebase.firestore.set
的异步函数等待,你可以使用Promise
来创建一个新的Promise
实例,并在resolve
回调中执行firebase.firestore.set
方法。resolve
回调中,你可以通过传递获取到的数据来更新Firestore中的文档。getDataAndSet
函数,并在需要等待异步操作完成时使用await
关键字。下面是一个示例代码:
import React, { useEffect } from 'react';
import firebase from 'firebase/app';
import 'firebase/firestore';
const getDataAndSet = async () => {
const unsubscribe = firebase.firestore().collection('yourCollection')
.doc('yourDocument')
.onSnapshot(async (snapshot) => {
const data = snapshot.data();
// 对获取到的数据进行操作
// 创建一个新的Promise实例,并在resolve回调中执行firebase.firestore.set方法
await new Promise((resolve) => {
firebase.firestore().collection('yourCollection')
.doc('yourDocument')
.set({ /* 更新的数据 */ })
.then(() => resolve());
});
// 在这里可以执行一些回调函数或其他操作
});
// 在组件卸载时取消监听
useEffect(() => {
return () => unsubscribe();
}, []);
// 在需要等待异步操作完成时调用
await getDataAndSet();
}
const YourComponent = () => {
useEffect(() => {
// 调用getDataAndSet函数
getDataAndSet();
}, []);
return (
// 组件内容
);
};
export default YourComponent;
这样,当调用firebase.firestore.set
的异步函数被触发时,它会等待onSnapshot
的回调函数完成之后再执行。这样可以确保在更新Firestore数据之前,获取到的数据是最新的。
领取专属 10元无门槛券
手把手带您无忧上云