使用JavaScript从Firebase获取值

3
我尝试了以下方法来检索数据,但是它没有起作用:Unhandled Rejection (TypeError): snapshot.val不是一个函数。(在'snapshot.val()', 'snapshot.val'未定义)
var companyScore, userScore;

            firebaseApp.firestore().collection('JobPosting')
            .doc(postId).get().then(snapshot => {
                console.log("Snapshot");
                console.log(snapshot);
                companyScore = snapshot.val().score;
              });
            firebaseApp.firestore().collection('people')
            .doc(currentUser.uid).get().then(snapshot => {
                userScore = snapshot.val().score;
              });

我需要一个解决方案来获取快照数据(预计为JSON或哈希表),以便我可以获取下标为"score"的值。
2个回答

2

您应该使用 .data() 而不是 .val()

因此,更新后的代码将如下所示:

var companyScore, userScore;

            firebaseApp.firestore().collection('JobPosting')
            .doc(postId).get().then(snapshot => {
                console.log("Snapshot");
                console.log(snapshot);
                companyScore = snapshot.data().score;
              });
            firebaseApp.firestore().collection('people')
            .doc(currentUser.uid).get().then(snapshot => {
                userScore = snapshot.data().score;
              });

官方文档链接:https://firebase.google.com/docs/firestore/query-data/get-data#get_a_document

本文介绍如何在Firebase Firestore中获取单个文档的方法。


它部分地起作用了,但我遇到了一个新问题:snapshot.data().scoresnapshot.data()['score']除了NaN之外什么也没有检索到,尽管我的Firebase已经有了键score - Memphis Meng
尝试使用 console.log 输出数据,看看你得到了什么。 - Pranav
1
我的错,伙计。我发现这是由于Firebase的异步性质引起的。谢谢! - Memphis Meng
不客气,伙计!有时候会犯错误。我认为你应该阅读文档中提供的示例代码,以便刷新有关使用SDK的知识。 - Pranav

0
从Firestore获取文档将返回一个DocumentSnapshot,该对象没有.val()方法。(这种方法存在于Realtime Database的DataSnapshot中。)
尝试重构您的代码为:
firebaseApp.firestore().collection('JobPosting').doc(postId).get().then(snapshot => {
  console.log("Snapshot", snapshot);
  companyScore = snapshot.data().score;
});

数据方法:

将文档中的所有字段作为对象检索。如果文档不存在,则返回“undefined”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接