繁体   English   中英

如何在 firebase 中排队函数

[英]How to enqueue functions in firebase

我正在使用 firebase 函数,并试图从 RTDB onWrite 触发器中排队 function,到目前为止,我要么出错,要么没有任何反应,我也无法在网上找到任何有用的东西,甚至 firebase 文档也没有太大帮助。 ..

这是我的实时数据库触发器 function,它应该使 firebase function 入队。

尝试 #1

exports.onUserBasketUpdated = functions
  .region("my-region")
  .database.ref("/path/{uid}")
  .onWrite(async (change, context) => {
    const queue = getFunctions(admin.app, "my-region").taskQueue(
      "expireUserBasket"
    );
    await queue.enqueue(
      {
        id: 1,
      },
      {
        dispatchDeadlineSeconds: 60 * 1, // 1 minute
      }
    );
    return { data: "ok" };
  });

尝试 #1 结果:错误:“ReferenceError:未定义队列”

尝试#2:

exports.onUserBasketUpdated = functions
  .region("my-region")
  .database.ref("/path/{uid}")
  .onWrite(async (change, context) => {
    await functions
      .taskQueue(`locations/my-region/functions/expireUserBasket`)
      .enqueue({ message: "hello" });
    return { data: "ok" };
  });

尝试 #2 结果:错误:“TypeError:functions.taskQueue 不是函数”

我正在尝试排队的 function:

exports.expireUserBasket = functions
  .region("my-region")
  .runWith({ timeoutSeconds: 120 })
  .tasks.taskQueue({
    retryConfig: {
      maxAttempts: 5,
      minBackoffSeconds: 60,
    },
    rateLimits: {
      maxConcurrentDispatches: 6,
    },
  })
  .onDispatch(async (data) => {
    console.info("data from the scheduled function", data);
  });

任何帮助是极大的赞赏:)

关于此功能的文档非常好。 提供了示例代码。

就实际调用特定的 function 而言,直接在您的函数代码中执行此操作。 你会这样称呼它。

我不相信在您的用例中使用了 Cloud Tasks 的 Enqueue 函数

当您收到队列未定义错误时,您可能错过了文档中的这一步(强调我的):

部署任务队列 function

使用 Firebase CLI 部署任务队列 function:

 $ firebase deploy --only functions:backupApod

首次部署任务队列 function 时,CLI 在 Cloud Tasks 中创建一个任务队列,并在您的源代码中指定选项(速率限制和重试)。

因此,在尝试部署和测试onUserBasketUpdated ,仅部署expireUserBasket function:

$ firebase deploy --only functions:expireUserBasket

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM