问题描述
我想在 firebase 云函数中使用 CloudTasksClient 来安排一些任务。 firebase 云功能有效,但我没有调用任务队列... 或者至少我在显示器上看不到任何东西。
这是我的代码:
export const onUpdatePost =
functions.firestore.document('projects/{id}').onUpdate(async change => {
console.log('Function called');
const data = change.after.data()! as ExpiringDocumentData
const { setDate } = data
if (!setDate) {
return
}
// Get the project ID from the FIREBASE_CONfig env var
const project = JSON.parse(process.env.FIREBASE_CONfig!).projectId
const location = 'us-central1'
const location2 = 'europe-west1'
const queue = 'cc-firebase-cloud'
const tasksClient = new CloudTasksClient()
const queuePath: string = tasksClient.queuePath(project,location2,queue)
functions.logger.debug(queuePath)
const url = `https://${location}-${project}.cloudfunctions.net/ccTimer`
const dataToSend = {isAccepted: true,id: change.after.id}
const task = {
httpRequest: {
httpMethod: 'POST',url,body: Buffer.from(JSON.stringify(dataToSend)).toString('base64'),headers: {
'Content-Type': 'application/json',},scheduleTime: {
seconds: Math.round((Date.Now() / 1000) + 120)
}
}
functions.logger.debug(task)
await tasksClient.createTask({ parent: queuePath,task })
// const expirationTask = response.name
// const update: ExpiringDocumentData = { expirationTask }
// await change.after.ref.update({
// expirationTask: admin.firestore.FieldValue.delete()
// })
})
export const ccTimer = functions.https.onRequest(async (req,res) => {
functions.logger.log(req.body)
const payload = req.body as ExpirationTaskPayload
try {
await admin.firestore().collection('projects').doc(payload.id).update({
isAccepted: !payload.isAccepted
})
res.send(200)
}
catch (error) {
console.error(error)
res.status(500).send(error)
}
})
所以基本上我创建任务并将其添加到队列中。我希望任务在 2 分钟内运行。我不确定我在这里做错了什么......
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)