Уже потрачено 3 часа - попытка запустить транзакцию в firebase, но она всегда завершается неудачей с maxretry.
В основном мой поток:
На клиенте:
- вызовите firebase http cloud funciton, используя js sdk.
На сервере:
- чтение данных из базы данных
- обновить / аннулировать данные при необходимости
- записать данные обратно, используя транзакцию
Проблема - шаг 4 всегда завершается неудачей с maxretry.
Упрощенный код:
exports.myMethod2 = functions.https.onCall((data, context) => {
utilsModule.throwIfNoAuth(context);
return methodWithTransaction(context, admin);
});
exports.methodWithTransaction = function (context, admin) {
//this is called only once from outside!
return rootRef.child("my/data/path").once("value")
.then(function (indexRef) {
var usageObj = indexRef.val();
//update object's state
usageObj =
{
timestampUtcArray: [1530656089821, 1530656089822],
itemsCount: 2,
writeTimestamp: 1530656502759
}
return usageObj;
})
.then(function (usageObj) {
//her eis the sad part...
return rootRef.child("my/data/path").transaction(data => {
//this method always run 25 times and fails.
//data aways != usageObj though accross the calls usageObj are the same as well data are the same:
// usageObj =
// {
// timestampUtcArray: [1530656089821, 1530656089822],
// itemsCount: 2,
// writeTimestamp: 1530656502759 <-- only timestamp is different
// }
// data =
// {
// timestampUtcArray: [1530656089821, 1530656089822],
// itemsCount: 2,
// writeTimestamp: 1530656503421 <-- only timestamp is different
// }
return usageObj;
}
})
}
Любой вклад приветствуется, так как это кажется тривиальной задачей, но я просто застрял ...