Как получить документ после установки метода в firestore при обновлении - PullRequest
0 голосов
/ 25 апреля 2020

Я делаю обновление в своем документе. Я использую метод set, потому что хочу перезаписать свои поля. Поэтому, когда я делаю свой набор, он работает отлично, изменяя объект в базе данных firestore. Но я не могу вернуть документ позже. Я получаю ошибку:

Cannot read property 'exists' of undefined
    at Firebase.js:127

Вот мой код:

const updateItemFromCollection = async (collectionName, uid, data) => {
  return database
    .collection(collectionName)
    .doc(uid)
    .set(data, { merge: true })
    .then(doc => {
      if (!doc.exists) {
        console.log("No such document!"); //Error
      } else {
        return doc.data();
      }
    })
    .catch(error => {
      console.log(error);
    });
};

1 Ответ

0 голосов
/ 25 апреля 2020

Это связано с тем, что метод set() возвращает Promise<void>, а не Promise<DocumentSnapshot<T>>.

Вам нужно будет снова прочитать документ, следующим образом:

const updateItemFromCollection = async (collectionName, uid, data) => {

  const docRef = database.collection(collectionName).doc(uid);

  return docRef.set(data, { merge: true })
    .then(() => {
        return docRef.get();
    .then(doc => {
      if (!doc.exists) {
        console.log("No such document!"); //Error
      } else {
        return doc.data();
      }
    })
    .catch(error => {
      console.log(error);
    });
};

Так работает Firestore, и AFAIK, он основан на том факте, что вы уже знаете значение полей документа, так как вы передали соответствующий объект set(). Однако можно заметить, что это не так для значений, рассчитанных на бэкэнде на основе значений дозорного, см. FieldValue .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...