Firebase: транзакции Firestore не определены? - PullRequest
0 голосов
/ 19 марта 2019

Я новичок в Firebase и читаю документы для изучения.

В настоящее время я использую Firestore вместо базы данных и, честно говоря, я не уверен в преимуществах и недостатках каждого из них.

В своих руководствах по чтению и записи данных в базу данных они имеют следующий код относительно транзакций :

function toggleStar(postRef, uid) {
  postRef.transaction(function(post) {
    if (post) {
      if (post.stars && post.stars[uid]) {
        post.starCount--;
        post.stars[uid] = null;
      } else {
        post.starCount++;
        if (!post.stars) {
          post.stars = {};
        }
        post.stars[uid] = true;
      }
    }
    return post;
  });
}

, который предназначен дляв этом случае смягчите условия гонки / искажения для переменной stars.

Мой вопрос состоит в том, что эквивалент Firestore transaction например

import firebase from 'firebase'


const postId = 1
const firestorePostRef = firebase.firestore().collection('posts').doc(postId)

// throws an error that firestorePostRef.transaction is not defined
firestorePostRef.transaction( (post) => {
  if (post) {
    // ...
  }
})

1 Ответ

1 голос
/ 19 марта 2019

Firebase Firestore обладает такой же функциональностью.Прочитайте данные и в той же операции напишите что-то вроде:

// Create a reference to the SF doc.
var sfDocRef = db.collection("cities").doc("SF");

db.runTransaction(function(transaction) {
    return transaction.get(sfDocRef).then(function(sfDoc) {
        if (!sfDoc.exists) {
            throw "Document does not exist!";
        }

        var newPopulation = sfDoc.data().population + 1;
        if (newPopulation <= 1000000) {
            transaction.update(sfDocRef, { population: newPopulation });
            return newPopulation;
        } else {
            return Promise.reject("Sorry! Population is too big.");
        }
    });
}).then(function(newPopulation) {
    console.log("Population increased to ", newPopulation);
}).catch(function(err) {
    // This will be an "population is too big" error.
    console.error(err);
});

Здесь связанные документы ссылка

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