Ошибка maxretry транзакции базы данных Firebase с определенным десятичным числом 63.99999999999999 - PullRequest
2 голосов
/ 05 февраля 2020

Я использую транзакцию базы данных Firebase Realtime для обновления узла.

См. Следующий код:

const addVal = 3.74;
return admin.database().ref(`admin/test/node`).transaction((current_value) => {
    return (current_value || 0) + addVal;
});

В целом работает нормально. Но это дает случайную ошибку maxrety 1-2 в неделю (не уверен в причине, может быть из-за высокой конкуренции?).

Но на этот раз есть особая проблема, когда значение узла является конкретным десятичные значения, он начинает выдавать maxrety ошибок каждый раз.

В приведенном выше случае, когда current_value = 63.99999999999999, существующий в узле, транзакции никогда не завершаются успешно. Каждый раз выдается следующее сообщение об ошибке:

current_value = 62.99999999999999 или 64.99999999999999 или 64 работает нормально.

Error: maxretry
    at Repo.rerunTransactionQueue_ (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:14629:67)
    at Repo.rerunTransactions_ (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:14534:10)
    at /srv/node_modules/@firebase/database/dist/index.node.cjs.js:14513:19
    at /srv/node_modules/@firebase/database/dist/index.node.cjs.js:11946:17
    at PersistentConnection.onDataMessage_ (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:11976:17)
    at Connection.onDataMessage_ (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:11290:14)
    at Connection.onPrimaryMessageReceived_ (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:11284:18)
    at WebSocketConnection.onMessage (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:11185:27)
    at WebSocketConnection.appendFrame_ (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:10773:18)
    at WebSocketConnection.handleIncomingFrame (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:10824:22)

Примечание. Узел не записывается другими клиентами. Это для тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...