Я использую транзакцию базы данных 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)
Примечание. Узел не записывается другими клиентами. Это для тестирования.