首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`agenda.js`如何计算“for ()”操作的时区

`agenda.js`如何计算“for ()”操作的时区
EN

Stack Overflow用户
提问于 2019-11-14 14:03:14
回答 1查看 1.4K关注 0票数 0

我在我的Node项目中使用agenda.js来处理我们需要运行的批处理过程,该项目有一个MongoDB数据库支持。效果很好。不过,我确实有一个关于时区的问题。当我使用every()操作时,它似乎接受作业名称和计划。因此,我一直在数据库中播种作业,如下所示:

代码语言:javascript
复制
  for (let job of dbJobs) {
    await agenda.every(schedule, job.name);
  }

请注意,对于上面的内容,schedule是cron格式- 00 05 * * 1-5

这个很管用。然而,据我所知,every()不接受repeatTimezone的论点。那么,在这种情况下,它如何计算时区呢?

为了澄清,在使用every()添加作业之后,当我查看数据库中的文档时,repeatTimezone属性是存在的,但是它的值被设置为null

其他agenda操作,如repeatEvery(),确实接受时区参数,如下所示:

代码语言:javascript
复制
job.repeatEvery('0 6 * * *', {
  timezone: 'America/New_York'
});

自从我使用every()以来,我一直在管理这个问题,首先使用every()播种数据库,然后运行Mongo updateMany()将timzeone显式地添加到所有作业中:

代码语言:javascript
复制
async function addTimezoneToJobs() {
  try {
    const db = await client.db(dbName);
    await db.collection('batch_processes').updateMany({}, {
      $set: {
        repeatTimezone: 'America/New_York'
      }
    });
  } catch (error) {
    console.log(error);
  }
}

但奇怪的是,即使我没有显式地将repeatTimezone属性值添加到作业中,repeatTimezone似乎也会计算相同的时间。

这里发生了什么我不明白的事?如何使用every()计算运行时,以及是否有一种传递时区的方法?

FYI:我不在需要在db中设置的同一时区。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-14 15:37:42

你的问题似乎有两个部分,我不确定我能否解释得很好,但让我试试

所以,你的第一个问题

然而,据我所知,every()不接受Timezone的论点

从技术上讲,您也可以将Timezone选项添加到every()中,因为该方法所做的是在内部调用job.repeatEvery,正如您已经知道的,您可以将timezone添加到其中。为了支持我的回答,我找到了两个证据

  1. 来自文档,因为every接受4个参数

每个(间隔、名称、数据、选项) options都是一个可选的参数,将传递给job.repeatEvery。为了使用此参数,还必须指定数据。

因此,您可以从技术上 pass timezone,如果您也通过data

  1. SourceCode中,您可以看到它们在内部使用job.repeatEvery(interval, options)

现在,关于你的第二个问题

在这种情况下,它如何计算时区?

嗯,他们有一个非常独特但必需的模块,名为ComputeNextRunAt()

因此,我检查了他们的源代码,并指出这是计算什么时候将是您的工作下一次运行基于startingTime和间隔。

您的代码之所以有效,是因为您在作业中提到过一次(最初)遵循America/New_York时区,因此每个下一个作业间隔都是基于此计算的,这就是不需要再次指定它的原因。

因此,如果最初您还没有指定时区属性,那么您本来可以得到local Timezone,但是现在您已经这样做了,它将根据这一点计算下一个时间间隔。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58858574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档