Как прервать транзакцию FireStore, если какая-либо операция записи не удалась? - PullRequest
0 голосов
/ 21 сентября 2018

В приведенном ниже коде я обновляю два документа в транзакции.Однако, если только одно обновление завершается успешно, а другое по какой-либо причине не удается, FireStore завершит транзакцию в любом случае.Как мне прервать транзакцию, если какая-либо из операций записи не удалась?

var country; // forget to set a value to this variable
// Create a reference to the SF doc.
var sfDocRef = db.collection("cities").doc("SF");
var usaDocRef = db.collection("country").doc(country);  //country is undefined  
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 }); //Will succeed
            transaction.update(usaDocRef, { lastPopulationUpdate: new Date()}); //Will fail
            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);
});

В приведенном выше примере мы забыли присвоить значение country.

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