我有一个函数返回Firebase Firestore查询的快照。如下:
export async function getClientWorkflowsFromFirebase(clientID) {
const snapshot = await firebase.firestore().collection("workflows").where("client_id", "==", clientID).get();
return snapshot
}
要运行上面的代码并获得结果,我想这样做:
getClientWorkflowsFromFirebase("some-client-id").then((x)=>{
x.forEach(doc => {
console.log(doc.data());
});
});
效果很好,但不是我想要的API。我希望得到相同的结果,而最终用户不必记住doc.data()
。
相反,我想让thenable函数为用户提供如下数据:
getClientWorkflowsFromFirebase("some-client-id").then((arr)=>{
arr.forEach(val => {
// data is then available in val, not val.data()
});
});
我如何重写该函数以提供最终结果?
使用QuerySnapshot的map()数组上的docs将文档快照的数组转换为JavaScript对象和JavaScript对象的数组。
export async function getClientWorkflowsFromFirebase(clientID) {
const snapshot = await firebase.firestore().collection("workflows").where("client_id", "==", clientID).get();
return snapshot.docs.map(doc => doc.data())
}
一定要学习使用Array.map()
-它应该在每个JavaScript程序员的工具箱中。