Работает ли функция должным образом? - PullRequest
0 голосов
/ 12 апреля 2019

В настоящее время я пишу облачную функцию, которая запускается всякий раз, когда какое-либо логическое значение изменяется на true. Вот функция

exports.reveal = functions.database.ref('/reveals/{postIDthatWasRevealed}/revealed').onUpdate((change, context) => {
const revealedValue = change.after.val()

if (revealedValue === true) {
   var updates = {}
   const postID = context.params.postIDthatWasRevealed
   const currentTime = Date.now()
   const addedTime = currentTime + 86400000 
   return admin.firestore().collection('posters').doc(postID).get().then(snapshot => {
        const value = snapshot.data() 
        const posterID = value.posterID
        const posterName = value.posterName
        const profileImage = value.profileImage
        const postKey = value.key
        return admin.database().ref('/convoID/' + postID).once('value', (snapshot) => {
        if (snapshot.exists()) {
           const convoIDCollection = snapshot.val()
           for (var child in convoIDCollection) {
               const convoID = child

               updates["/conversations/"+convoID+"/information/reciever/Name"] = posterName
               updates["/conversations/"+convoID+"/information/reciever/profileImage"] = profileImage
               updates["/conversations/"+convoID+"/key"] = postKey
               updates["/conversations/"+convoID+"/timeOfDeletion"] = addedTime
           }
        }

           const batch = admin.firestore().batch()
           const postFireStoreRef = admin.firestore().collection('posts').doc(postID)

           batch.update(postFireStoreRef,{"revealedDate": currentTime})
           batch.update(postFireStoreRef,{"timeOfDeletion": addedTime})
           batch.update(postFireStoreRef,{"information": {"posterID":posterID,"posterName":posterName,"profileImage":profileImage} })
           batch.update(postFireStoreRef,{"key":postKey})

           return admin.database().ref('/reveals/' + postID).once('value', (snapshot) => {
            if (snapshot.exists()) {
                const revealTotalValue = snapshot.val()
                const revealTotal = revealTotalValue.reveals
                return admin.database().ref('/allTimeReveals/' + posterID).once('value', (snapshot) => {
                    if (snapshot.exists()) {
                        const currentReveals = snapshot.val()
                        const newReveals = currentReveals + revealTotal
                        updates["/allTimeReveals/" + posterID] = newReveals
                    }
                    else {
                        updates["/allTimeReveals/" + posterID] = revealTotal
                    }
                })
            }
           return Promise.all[admin.database().ref().update(updates), batch.commit()]
        })
    })
   })
}
else {
    return null
}
})

Однако, когда я добавляю все больше и больше запросов к базе данных в этой единственной функции, меня беспокоит, запускаю ли я каждый запрос асинхронно ... правильно ли эта функция упорядочена? Я все еще изучаю основы облачных функций и обеспокоен тем, что неправильно обрабатываю возвраты / обещания.

...