Облачная функция Firestore - обновление поля карты - PullRequest
0 голосов
/ 16 апреля 2020

Афиша-давний читатель-давний читатель - какое классное сообщество.

Я изучаю Firestore / React и надеюсь, что вы можете помочь мне с этим - я рву на себе волосы!

  • Я использую node.js и функции Firestore Cloud
  • Я пытаюсь обновить значение поля карты connectedContractData , в любом документе, который соответствует моим критериям
  • После кучи чтения я решил сделать это на стороне сервера и использовать транзакции, чтобы гарантировать, что все соответствующие документы обновляются атомарно
  • Код будет синхронизировать c с Firestore успешно, но на изменяя документ контракт , мне возвращается ошибка функция вернула неопределенное, ожидаемое обещание или значение

Заранее спасибо!

Приветствия Alex

Структура данных ниже:

contracts
service
   linkedContractUid: [x, y, z]
   linkedContractData: {contractId:{label: data, label: data, label: data}, contractId:{}, contractId:{}}

Код ниже:


const updateServiceContract = (contract, contractId) => {
    const updateDocs = admin.firestore().collection('service').where('linkedContractUid', 'array-contains', contractId)


    var transaction = admin.firestore().runTransaction(t => {
        return t.get(updateDocs)
            .then(snapshot => {
                snapshot.forEach(doc => {
                    const docRef = admin.firestore().collection('service').doc(doc.id)
                    console.log(docRef)
                    t.set(docRef, {
                        linkedContractData: {
                            [contractId]: contract
                        }
                    });
                })
            })
    })
}

exports.contractUpdated = functions.firestore
    .document('contracts/{contractId}')
    .onUpdate((change, context) => {
        const contract = change.after.data();
        const contractId = change.after.id
        return updateServiceContract(contract, contractId)
    })

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