为什么我的 Firebase 计划函数不是每分钟都运行?

问题描述 投票:0回答:1

我有一个 firebase 函数,如下所示:

export const syncDataScheduled = onSchedule({
  schedule: "every 1 minutes",
  timeoutSeconds: 70, //we don't want the function to run for longer than 1 minute (will give it some extra time for cleanup)
  maxInstances: 5,
  timeZone: 'America/New_York',
  concurrency: 5,
}, async () => {

  let terminateFunction = false;
  // firebase functions can only run max every minute, so we need to loop for 1 minute since we want to run this every 3 seconds.
  setTimeout(() => terminateFunction = true, 59_000);

  while (true) {
    // we don't want the function to run for longer than 1 minute, since we schedule it to run every minute anyway.
    if (terminateFunction) break;
    await syncData();
    await new Promise(resolve => setTimeout(resolve, 3_000));
  }
});

我想每3秒同步一些公司数据。但由于 Google Firebase 函数的最小调度时间为每分钟一分钟,因此我必须循环直到一分钟结束。

问题是,Firebase 有时会跳过运行。这意味着该函数不会运行整整一分钟。

请参阅下面日志中的间隙。

enter image description here

有人可以帮忙吗?

node.js firebase google-cloud-functions
1个回答
0
投票

事实证明,问题是我们在 Node 18 上使用了 fetch API,这是实验性的。该函数每 3 秒使用 fetch 发出大约 12 个 http 请求,有时从其中一个 fetch 调用返回的承诺不会“履行” - 这意味着它不会解析或拒绝。

我只是将 Node 版本号从 18 更改为 20,它就开始正常工作了。

© www.soinside.com 2019 - 2024. All rights reserved.