Uncaught TypeError: firebase.firestore () ....... set не является функцией в HTMLButtonElement. <anonymous> - PullRequest
0 голосов
/ 17 июня 2020

Я использую Firebase для разработки веб-приложений. Я получил это сообщение об ошибке

Uncaught TypeError: firebase.firestore(...).collection(...).orderBy(...).limit(...).set is not a function
    at HTMLButtonElement.<anonymous> (main.js:152)

из-за этого кода.

firebase.firestore().collection('script').orderBy('timestamp','desc').limit(1).set({
    finaltext: resultText.value,
    name: firebase.auth().currentUser.displayName,
    uid: firebase.auth().currentUser.uid
  },{merge: true}).catch(function(error){
    console.error('Error writing new message to Firestore', error);
  });

Я искал Inte rnet, но не смог найти, почему возникло это сообщение об ошибке. Не могли бы вы мне дать совет?

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вам необходимо сначала получить желаемый документ с помощью get(), прежде чем писать новые поля с помощью set() (с опцией слияния) или update().

firebase.firestore().collection('script').orderBy('timestamp','desc').limit(1).get()
.then(querySnapshot => {
    if (!querySnapshot.empty) {
        //We are sure the document exists, we can then use update()
        return querySnapshot.docs[0].ref.update({
          finaltext: resultText.value,
          name: firebase.auth().currentUser.displayName,
          uid: firebase.auth().currentUser.uid
        });
    } else {
       throw new Error("No document");
    }
})
.catch(error => {
    console.log("Error:", error);
});

Обратите внимание, что метод get() возвращает QuerySnapshot, поэтому вам нужно сделать querySnapshot.docs[0], чтобы получить DocumentSnapshot, соответствующий уникальному do c возвращается запросом.

1 голос
/ 17 июня 2020

Метод limit возвращает значение типа Query:

limit

limit ( limit : number ) : Query < T >

Создает и возвращает новый запрос, который только возвращает первые совпадающие документы.

https://firebase.google.com/docs/reference/js/firebase.firestore.Query#limit

Следовательно, когда вы хотите получить данные, используются как orderBy, так и limit. Если вы хотите добавить данные в базу данных, просто сделайте следующее:

firebase.firestore().collection('script').set({
    finaltext: resultText.value,
    name: firebase.auth().currentUser.displayName,
    uid: firebase.auth().currentUser.uid
  },{merge: true}).catch(function(error){
    console.error('Error writing new message to Firestore', error);
  });
...