Мой вопрос о том, что происходит в транзакции базы данных Firebase в реальном времени.Допустим, у меня есть код, похожий на этот в облачной функции.Экспортируемая функция вызывается по запросу http.Хорошо, я знаю, что updateBalance()
должен быть вызван после возвращения обещания, но это не главное.Я хочу знать, почему, если бы я выполнил этот код с балансом 25,00, возвращаемое значение путем вызова ref.once () в hasMoneyInTheBank () составляет -0,02, а не 25,00 или 24,98.
Я знаю, что в итоге все обновляется, и окончательное значение составляет 24,98.Это потому, что я читаю данные из того же соединения?
Что если какой-то другой процесс будет читать эти же данные в это время?
function updateBalance(id, amount){
const db = database();
const currentBalance = db.ref(`${id}/balance`);
currentBalance.transaction(currentValue =>(currentValue*100 - amount*100)/100 );
}
function hasMoneyInTheBank(id,amount){
const db = database();
const ref = db.ref(`${id}/balance`);
ref.once('value',snap => {
console.log(`This is the balance:${snap.val()}`);
if(snap.val() > amount){
return true;
}else{
return false;
}
})
.catch(error=> console.log(error));
}
export function doSomeAction(id, description){
const db = database();
const ref = db.ref(`${id}/logs/log_something`);
const data = {timestamp:database.ServerValue.TIMESTAMP, description:description};
ref.push();
console.log(hasMoneyInTheBank is: ${hasMoneyInTheBank(id,5.00)}`);
updateBalance(id,0.02);
};