Я пытаюсь написать транзакцию Firebase в моем приложении angular6 / typcript.Вот как это выглядит:
console.log('point 1');
const transaction = db.runTransaction(t => {
console.log('point 2');
const docRef = db.collection('Pending').doc(req.query.inviteId);
console.log('point 3');
const p = t.set(docRef, acceptance).commit();
console.log('p = ', p);
return p;
}).then(result => {
console.log('result = ', result);
}).catch(err => {
console.log('err = ', err);
});
Вот как выглядит вывод:
info: точка 1
info: точка 2
info: точка 3
информация: p = Обещание {}
информация: точка 2
информация: точка 3
информация: p = Обещание {}
информация: точка 2
информация: точка 3
информация: p = Обещание {}
информация: точка 2
информация:точка 3
информация: p = обещание {}
информация: точка 2
информация: точка 3
информация: p = обещание {}
info: err = {Ошибка: 10 ABORTED: указанная транзакция истекла или больше не действительна.в Object.exports.createStatusError (/Users/gibranshah/repos/eva-firebasefunctions/functions/node_modules/grpc/src/common.js:87:15) в Object.onReceiveStatus (/ Users / gibranshah / repos / eva-firebfunctions / node_modules / grpc / src / client_interceptors.js: 1188: 28) в InterceptingListener._callNext (/Users/gibranshah/repos/eva-firebasefunctions/functions/node_modules/grpc/src/client_interceptor): interceptor.jpg.onReceiveStatus (/Users/gibranshah/repos/eva-firebasefunctions/functions/node_modules/grpc/src/client_interceptors.js:614:8) при обратном вызове (/ Users / gibranshah / repos / eva-firebasefundules / functions /src / client_interceptors.js: 841: 24) код: 10, метаданные: метаданные {_internal_repr: {}}, подробности: «Ссылочная транзакция истек или больше не действительна».}
Другими словами, кажется, что транзакция выполняется нормально (и я убедился, что данные, которые я пытаюсь зафиксировать в базе данных, фактически передаются в базу данных), но он хочет повторитьтранзакция снова и снова, пока не истечет, и в этот момент блок перехвата выводит сообщение об ошибке:
Ошибка: 10 ABORTED: ссылка на транзакцию истек или больше не действительна.
Почемумою транзакцию хотите повторить, пока она не истечет?Есть ли что-то еще, что мне нужно сделать с p (обещание, возвращаемое t.set (…) .commit ())?Что-то, чтобы указать вызывающей функции (db.runTransaction (…)), что мы закончили с транзакцией?
Спасибо.