我正在使用Firestore为我的Reactjs应用程序存储数据。我有这样一个函数:
export async function batchAddProduct(data) {
const productRef = doc(collection(db, "product"));
const batch = writeBatch(db);
for (const datum of data) {
batch.set(productRef, datum);
}
return await batch
.commit()
.then(() => {
return { data: true, error: null };
})
.catch((err) => {
return { data: null, error: err };
});
}
基本上,我希望一次添加大量数据。因此,我使用writeBatch
方法。我从SO中的答案中看到,他们首先使用doc(collection(db, "product")
生成一个空文档,然后使用batch.set()
填充该文档。因此,我在这里执行此操作,并且一次传递多达500个数据(这是批处理写入的最大限制),但不知何故,最多只有3个数据被写入数据库。这是为什么?我错过了什么吗?
更新:
评论称:
1.当我console.log(data)
时,它基本上打印出一个包含500个对象的数组(我肯定不能在这里粘贴),但我可以向您保证它正在接收正确的数据。
batchAddProduct
在还原传奇中被称为:
function* BATCH_ADD_PRODUCT(input) {
yield put({
type: actions.SET_STATE,
payload: {
loadingUpdate: true,
},
});
const { data, error } = yield call(batchAddProduct, input.payload.data);
if (data) {
yield put({
type: actions.GET_PRODUK,
});
yield put({
type: actions.SET_STATE,
payload: {
loadingUpdate: false,
alert: {
type: "success",
message: "Product is added successfully.",
},
},
});
}
if (error) {
console.log(error);
yield put({
type: actions.SET_STATE,
payload: {
loadingUpdate: false,
alert: {
type: "error",
message: error.message || "Error occured.",
},
},
});
}
}
我在dispatch
中这样使用它:
dispatch({
type: actions.BATCH_ADD_PRODUK,
payload: {
data: data, // WHICH CONTAINS UP TO 500 OBJECTS
},
});
1条答案
按热度按时间exdqitrt1#
我还没有尝试过批量写入的生成器函数,但请尝试以下操作: