使用打字稿我得到
QueryDocumentSnapshot<DocumentData>.data(options?: SnapshotOptions | undefined): DocumentData
问题是..我真的必须检查数据是否可能未定义吗
if (snapDoc.data()) //...
else //...
或者可以安全地snapDoc.data()!
因为数据永远无法未定义?
如果它可以未定义,那么数据何时或在什么情况下返回未定义?
如果您使用返回DocumentSnapshot
getDoc(<DoucmentReference>)
查询单个文档,那么是的,如果该文档不存在,data()
将返回undefined
。
const docSnap = await getDoc(docRef);
if (docSnap.exists()) {
console.log("Document data:", docSnap.data());
} else {
// doc.data() will be undefined in this case
console.log("No such document!");
}
如果使用getDocs(<query>)
查询多个文档,则返回一个QuerySnapshot
,该具有.docs
属性(QueryDocumentSnapshot
数组),其中包含确定存在的所有匹配文档。因此,在这种情况下.data()
永远不会undefined
如文档中所述。
const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
如果它可以未定义,那么数据何时或在什么情况下返回未定义?
简而言之,当您使用getDoc()
获取单个文档时,如果您在DocumentSnapshot
上使用它,data()
可以返回undefined