当我试图通过onSnapshot()订阅firestore上的实时更新时,我收到了这个错误,在redux react工具的createAsyncThunk的异步函数中使用它。
该函数不等待forEach完成。我已经尝试了for of循环,但不适用于onSnapshot。
这是我的createAsyncFunction。
export const getAuctions = createAsyncThunk(
'auctions/getAuctions',
async () => {
const auctionRef = collection(db, "auctions");
const fetched = [];
onSnapshot(auctionRef, (querySnapshot) => {
for (const doc of querySnapshot.docs) {
fetched.push(doc.data());
};
})
return fetched
}
)
这是在应用程序加载时从useEffect内部的dispatch()调用的。有什么想法吗?!
谢谢你
1条答案
按热度按时间brgchamk1#
这里有三个问题:
onSnapshot
在这个异步thunk返回之后运行long,而不是在thunk返回期间运行long。因此,你实际上是在“now”返回一个空数组,里面没有任何数据。onSnapshot
* 确实 * 运行时,它试图改变fetched
数组......但是该数组引用已经被添加到Redux状态并被Immer冻结。因此,JS引擎会抛出错误,因为你不能改变冻结的数组。onSnapshot
显然可以运行 * 多次 *,而thunk只运行 * 一次 *(每次调度它时)。我不熟悉Firebase的API,但您应该尝试使用“现在”返回数据的东西,沿着(伪代码):
const data = await collection(db, "auctions").get()