В настоящее время я пишу облачную функцию, которая запускается всякий раз, когда какое-либо логическое значение изменяется на 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
}
})
Однако, когда я добавляю все больше и больше запросов к базе данных в этой единственной функции, меня беспокоит, запускаю ли я каждый запрос асинхронно ... правильно ли эта функция упорядочена? Я все еще изучаю основы облачных функций и обеспокоен тем, что неправильно обрабатываю возвраты / обещания.