在 firebase 中使用预定的 CloudTasksClient

问题描述

我想在 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...