Как обновить документ из коллекции всякий раз, когда другой документ в другой коллекции создается с помощью функций Firebase? - PullRequest
0 голосов
/ 29 апреля 2019

Поэтому я пытаюсь обновлять баланс товаров при создании новой продажи, поэтому я слушаю, как эта продажа создает и получает все товары, чтобы проверить совпадение идентификатора между новой продажей и товарами и обновить ее баланс

функция развернута, но ничего не меняется в балансе предметов

 export const itemsBalance = functions.firestore

.document("sales/{id}")
.onCreate((snap, context) => {
  //get sale data and items data
  const data = snap.data();

  //get all items
  let myItems;
  firebase.firestore().collection('items').get()
  .then(snapshot => {
      myItems = snapshot.docs.map(doc => doc.data());

      data.items.forEach((element, index) => {
          let updatedItem = myItems.find(el => el.id == element.id);
          if(updatedItem) {
              updatedItem.balance = updatedItem.balance - element.qty;
          }



          firebase.firestore().collection(`items/${element.id}`)
          .doc().update(updatedItem)
          .then(res => console.log(res))
          .catch(err => console.log(err));
          })
        })
        .catch(err => {
          console.log(err)
        })
      return data;
   });

package.json

  "dependencies": {
    "firebase-admin": "^7.3.0",
    "firebase-functions": "^2.3.0"
   }

1 Ответ

0 голосов
/ 29 апреля 2019

Вы не возвращаете обещание, которое разрешается, когда вся асинхронная работа полностью выполнена. Вам нужно взять все обещания, возвращаемые функцией update (), поместить их в массив и использовать Promise.all () для этого массива, чтобы сгенерировать новое обещание, которое разрешится после завершения всей работы. Верните это обещание из функции.

Смотри также:

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