添加Firebase任务队列函数时,如何从Google Cloud Tasks获取自动生成的任务名称?

4xrmg8kj  于 2022-11-17  发布在  Go
关注(0)|答案(1)|浏览(126)

根据云函数文档中关于how to Enqueue functions with Cloud Tasks的内容,我们演示了如何创建Firebase任务队列函数。
但是,如果我调用enqueue将函数入队,则返回一个Promise,其中没有任何关于我的排队任务的信息。
→我如何从刚创建的任务中获取任务名称或任何引用,并添加到我的队列中?

  • 我需要存储此名称,以便可以在执行之前取消任务。*
ndasle7k

ndasle7k1#

正如它似乎是,Firestore云功能有一个有限的功能集相比,“真实的的”谷歌云功能。
要获取有关该任务的更多数据,请不要使用firebase-admin/functions中的enqueue函数,而是使用@google-cloud/tasks库:

// Imports the Google Cloud Tasks library.
import { protos, CloudTasksClient } from "@google-cloud/tasks";

// Set all the details for the function to call
const serviceAccountEmail = "PROJECT_ID@appspot.gserviceaccount.com";
const project = "PROJECT_ID";
const queue = "my-queue";
const location = "europe-west1";
const url =
    "https://europe-west1-PROJECT_ID.cloudfunctions.net/yourFunctionToCall";

const client = new CloudTasksClient();
const formattedParent = client.queuePath(project, location, queue);

const payload = {
  data: {
    your: "data"
  },
};

const task = {
  httpRequest: {
    httpMethod: "POST",
    url: url,
    body: Buffer.from(JSON.stringify(payload)).toString("base64"),
    headers: {
      "Content-Type": "application/json",
    },
    oidcToken: {
      serviceAccountEmail,
    },
  },
  scheduleTime: {
    seconds: Date.now() / 1000, // Any epcoch time in seconds, or do not set for immediate execution
  },
} as protos.google.cloud.tasks.v2beta3.ITask;

const request = {
  parent: formattedParent,
  task: task,
};

const [response] = await client.createTask(request);
functions.logger.info(`Created task ${response.name}`);

调用client.createTask将返回有关Task的数据。这允许您在必要时删除Task。

相关问题