我在Google Cloud Functions中有一个使用诺言的预定工作。 在第一次执行时,在新部署之后,代码可以工作,但是第一次执行后的所有执行都会失败-由“测试功能”安排和触发。
我怀疑我的诺言是问题的根源,但我无法弄清楚哪里出了问题。
我的代码结构
googleCloufFunction.onRun()
firebaseCall.once().forAll(note)
Promise.all(lookupPromise)
.then(addNotification) //return Promise.all(notificationPromises)
.then(sendEmail) //return Promise.all(sendEmailPromises)
.then(udpate note)
第一次执行时,我得到以下日志记录
console.log('lookupPromises-MembersToAlert')
console.log(“ lookupPromises完成”)
console.log('sendEmail')
console.log('更新数据库')
...
第一次执行后,日志将在
后停止console.log('lookupPromises-MembersToAlert')
我的代码
exports.notification_email = functions.region('europe-west1')
.pubsub.schedule('0 * * * *').timeZone('Europe/Stockholm')
.onRun((event) => {
//Search for notes with passed alertDate
database.ref('notes/').orderByChild('data/alertDate').endAt(moment().valueOf())
.once('value', (snapshot) => {
snapshot.forEach( (data) => {
//Get membersToAlert and isAlreadyProcessed
//...
if (!isAlreadyProcessed) {
//Get category name
let lookupPromises = []
console.log('lookupPromises - category name')
//Push promise - returns category title for current node
//...
//Get membersToAlert email addresses and names
console.log('lookupPromises - membersToAlert')
membersToAlert.forEach((memberId, index) => {
//Push promise - returns an object {userName, userEmail}
})
//Perform lookup and promise chain rest of the calls
return Promise.all(lookupPromises)
.then((lookupArray)=>{
//Collect variables from lookupPromises response
//...
console.log('lookupPromises completed')
//addDbNotification performs and returns Promise.all()
return addDbNotification(...) //Needs result from lookupPromises
})
.then(()=>{
//Send email
console.log('sendEmail')
//sendMail performs and returns Promise.all()
return sendEmail(...) //Needs result from lookupPromises
})
.then(()=>{
//Update database
console.log('update database')
return dbRef.update( {"sys/sentEmail": true} )
})
.catch((err)=>{
console.log('notification_email Error', err)
return false
})
}//End if (!alreadyProcessed)
return true
})//End snapshot.forEach
return true
})//End firebase .once()
.then(()=>{
return true
})
.catch((err)=>{
console.log("Cronjob error", err)
})
// return true
})//End exports.notification_email
addDbNotification
const addDbNotification = () => {
//This function needs data from "lookupPromises"
let promises = []
membersToAlert.forEach((memberId, index) => {
//Push promises to 1. add notification and 2. update counter for each "membersToAlert"
})
return Promise.all(promises).catch((err)=>{
console.log('addDbNotification Error', err)
})
}
sendMail()
const sendEmail = () => {
//This function needs data from lookupPromises
let mailPromises = []
//Push promise to send mail to each "mailRecipientsArray"
return Promise.all(mailPromises).catch((err)=>{
console.log("sendEmail error", err)
})
}
我想要实现的目标是:
截至目前,日志显示执行结束为时过早
hourly_job-notification_email [procId]函数执行开始hourly_job-notification_email
hourly_job-notification_email [procId]开始hourly_job-notification_email
hourly_job-notification_email [procId]函数返回的值未定义,预期的承诺或值
hourly_job-notification_email [procId]函数执行耗时199毫秒,状态为:“ ok” hourly_job-notification_email
hourly_job-notification_email [procId] lookupPromises-类别名称hourly_job-notification_email
hourly_job-notification_email [procId] lookupPromises-MembersToAlert hourly_job-notification_email
任何帮助,不胜感激!