簡體   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