Ошибка: вы должны вернуть обещание в вашей транзакции () - обратный вызов

1

Мой скрипт выдает следующую ошибку при возврате результата функции 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 методов, поэтому я должен делать некоторые очевидные ошибки здесь.

  • 0
    Вероятно, это относится к return t , я не знаком с .runTransaction но вы можете попробовать заменить return t на return new Promise((resolve, reject) => { t.set(...); resolve(); });
Теги:
firebase
google-cloud-firestore
es6-promise

1 ответ

0

Не использовали транзакции 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 => {...});

  • 0
    Это устраняет ошибку, но не стоит ждать результатов, если я правильно понимаю.
  • 0
    обновленный ответ попробуйте это, но это не должно произойти, попробуйте это позже.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню