Я использую базу данных Firebase Realtime, и мне нужно выполнить несколько операций в базе данных, некоторые из которых зависят от результата предыдущего, создавая знаменитый «ад обратного вызова». Как я могу обработать ошибки, когда, например, второй вызов идет не так, как первый, но успешно?
Я пытался найти «транзакцию базы данных Firebase в реальном времени» (например, транзакции в mysql или postgres), но не нашел хороших примеров.
mDb.getReference("users").setValue("someValue").addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
mDb.getReference("services").setValue("someValue2").addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
mDb.getReference("stores").setValue("someValue3").addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// Here, for some reason, the value "someValue3" could not be set.
}
});
}
}
});
}
}
});
Мне нужно, чтобы, если какая-то операция пошла не так, чтобы вернуть («откатить») значения, установленные ранее. Прямо сейчас, если транзакция со ссылкой «хранилища» завершится неудачно, значения, заданные для «пользователей» и «служб», останутся в базе данных.