Firebase транзакция «Максретри» - PullRequest
0 голосов
/ 04 июля 2018

Уже потрачено 3 часа - попытка запустить транзакцию в firebase, но она всегда завершается неудачей с maxretry.

В основном мой поток:

На клиенте:

  1. вызовите firebase http cloud funciton, используя js sdk.

На сервере:

  1. чтение данных из базы данных
  2. обновить / аннулировать данные при необходимости
  3. записать данные обратно, используя транзакцию

Проблема - шаг 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;
            }
        })

}

Любой вклад приветствуется, так как это кажется тривиальной задачей, но я просто застрял ...

...