В приведенном ниже коде я обновляю два документа в транзакции.Однако, если только одно обновление завершается успешно, а другое по какой-либо причине не удается, 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
.