Поскольку вы знаете, сколько транзакций вам нужно запустить (array.length
), вы можете подсчитать, сколько транзакций было завершено, а затем перезагрузить окно после последней:
let doneCount = 0;
for (var i = 0; i < array.length; i++) {
let brand = array[i];
database.ref("brands/" + brand).transaction(function (post) {
if (post) {
if (post.followers != null) {
post.followers++;
} else {
post.followers = 1;
}
}
return post;
}, function(error, committed, snapshot) {
if (doneCount++ == array.length) {
window.location.reload();
}
});
}
Также см. документация для runTransaction
.
Но через несколько месяцев есть гораздо более простой способ сделать это: использовать оператор ServerValue.increment()
. Фактически, с этим вы можете объединить весь l oop в один оператор обновления:
let updates = {};
for (var i = 0; i < array.length; i++) {
let brand = array[i];
updates[`brands/${brand}] = firebase.database.ServerValue.increment(1);
}
database.ref().update(updates);
Намного проще!