В моем коде облачных функций firebase:
return num_picks_ref.transaction(function(cur_num_picks) {
console.log(`cur_num_picks: ${cur_num_picks}`)
console.log(`cur_num_picks <= 0: ${cur_num_picks <= 0}`)
if (cur_num_picks <= 0) {
console.error(`user ${uid} is submitting picks too fast, reached negative pick balance.`)
}
return cur_num_picks - 1
})
Тогда в выходных логах я получаю:
12:46:35.519 PM ---- db_positions_decrementPickCount ---- cur_num_picks: 87
12:46:35.420 PM ---- db_positions_decrementPickCount ---- user KtY8U5e1p8MCJDOFW2eEuLW5DO83 is submitting picks too fast, reached negative pick balance.
12:46:35.416 PM ---- db_positions_decrementPickCount ---- cur_num_picks: null
Я понимаю, что транзакции могут вызываться несколько раз, чтобы гарантировать атомарную запись, но это единственный код, модифицирующий cur_num_picks
в среде. Нигде больше это значение не изменяется в БД реального времени.
Кажется, что функции не запускаются в указанном порядке, что не имеет смысла для меня.
Самое главное, cur_num_picks
оценивается как 87 в первой строке, но не 87 снова в следующей строке. Как это может быть?