反应firebase firestore插入json
Posted
技术标签:
【中文标题】反应firebase firestore插入json【英文标题】:react firebase firestore insert json 【发布时间】:2021-07-03 17:20:06 【问题描述】:我正在使用 react with firebase firestore 插入一个完整的集合,其中包含 firebase firestore 中尚不存在的文档。
但是我的代码没有插入任何集合,我也没有收到任何错误,好像什么都没发生一样。
这是返回我的 json 的代码
createJson.js
const jsonArray = [name:"Bill" , age : "5" ,name:"Jom" , age : "3" ]
return jsonArray;
插入Json.js
import 'firebase/firestore';
const db = firebase.firestore();
export const insertJson = (jsn)=>
try
jsn.forEach(itm=>
let id = db.collection("doctors").doc().id;
db
.collection("doctors")
.doc(id)
.set(itm)
.then(doc=>
console.log("Doc inserted with " +doc.id);
)
);
catch(err)
console.log("Error : " +err);
App.js
useEffect(()=>
const j = createJson();
insertJson(j);
,[])
所以换句话说,我的脚本不会创建包含文档的集合。
感谢您的帮助。
【问题讨论】:
【参考方案1】:您应该使用 Firestore add()
方法和 Promise.all()
,如下所示:
export const insertJson = (jsn) =>
try
const promises = [];
jsn.forEach((itm) =>
promises.push(db.collection('doctors').add(itm));
);
Promise.all(promises).then((results) =>
console.log(results.length + ' doctors added');
);
catch (err)
console.log('Error : ' + err);
或者,map()
:
export const insertJson = (jsn) =>
try
Promise.all(jsn.map((itm) => db.collection('doctors').add(itm))).then(
(results) =>
console.log(jsn.length + ' doctors added');
);
catch (err)
console.log('Error : ' + err);
如果医生人数少于 500 人,您也可以使用batched write。
export const insertJson = (jsn) =>
try
const batch = db.batch();
jsn.forEach((itm) =>
const docRef = db.collection('doctors').doc();
batch.set(docRef, itm);
);
batch.commit().then((results) =>
console.log('doctors added');
);
catch (err)
console.log('Error : ' + err);
【讨论】:
以上是关于反应firebase firestore插入json的主要内容,如果未能解决你的问题,请参考以下文章
来自 Firebase Firestore 的 Android 反应式列表
firebase(firestore)和vuejs + vuefire的非常奇怪的反应性问题
React Hooks + Firebase Firestore onSnapshot - 正确使用带有反应钩子的 Firestore 监听器