Мой скрипт выдает следующую ошибку при возврате результата функции set firestore assync:
Вы должны вернуть Promise в своей транзакции() -callback.
Согласно документации firebase о транзакциях, функция set возвращает транзакцию.
Вот упрощенная копия моего кода.
var myDoc = {
field1: "v1"
};
var docRef = db
.collection("docs")
.doc("1");
return db
.runTransaction(t => {
return t
.set(docRef, chat, {merge:false}); //has i understand, this should return a transaction object but the error says otherwise.
})
.then( doc => {
response.send();
})
.catch(err => {
...;
})
Я до сих пор новичок в Nodejs и не очень хорошо разбираюсь в цепочке assyncs методов, поэтому я должен делать некоторые очевидные ошибки здесь.
Не использовали транзакции firestore, но я использовал транзакции с использованием firebase. Вы можете попробовать следующее
return db
.runTransaction(t => {
return t.set(docRef, chat, {merge:false})
.then(data => {
return Promise.resolve('transaction complete');
})
.then( doc => {
response.send();
})
.catch(err => {
...;
})
и метод, который охватывает весь ваш код, должен возвращать обещание, поскольку вы написали return db.runTransaction(t => {....})
поэтому, если это не нужно, используйте
var transaction = db.runTransaction(t => {...});
return t
, я не знаком с.runTransaction
но вы можете попробовать заменитьreturn t
наreturn new Promise((resolve, reject) => { t.set(...); resolve(); });