node.js - Heroku - 延时函数

标签 node.js heroku

我有一个函数,每分钟检查一次是否是上午 7:30,如果到了时间,它就会向我发送一条短信。

但是由于我上传到heroku并且我的时区不同,所以我必须调整前面的时间,如下所示:

setInterval(function() {
  let date = new Date();
  if(date.getHours() == 11 && date.getMinutes() == 30){
    sendDaily()
  }
}, 60000)

但是当我上传到 Heroku 时,我的手机上会随机收到警报。我还尝试使用 schedule 包来帮助解决此问题,但出现了相同的错误,该函数在应该运行时没有运行。我也尝试过更改 heroku 上的时区,但这没有帮助,因为当我输入我的城市/位置时,它仍然给出相同的默认时区时间。

最佳答案

Heroku 构建在 AWS 上,并在它认为合适的任何中心创建容器。这意味着您的应用程序可以在世界任何地方运行,如此 AWS infrastructure map 所示。 。话虽如此,在服务器上使用 new Date 会根据创建的服务器产生非常不同的结果,而您无法控制该结果。

如何解决这个问题?

您需要解耦new Date对操作系统的依赖。

选项

  1. 您可以使用返回一天中标准时间的 API,这将为所有 AWS 容器创建单一事实来源,无论它们位于何处。这是一个Example

  2. 假设所有 AWS 操作系统时钟均同步,您可以手动设置时区。您可以使用moment来做到这一点和 moment timezone

  3. 使用并非在世界各地随机创建的专用服务器。与任何权衡一样,如果您试图扩展,这会产生自己的问题,但它是一种选择。

关于node.js - Heroku - 延时函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51624919/

相关文章:

node.js - Bundle.js 404(未找到)

javascript - 如何在不导入模块的情况下运行它?

javascript - 从 Express 静态 html 文件调用 $.getJSON() 无法获取数据

node.js - 通过 Nightmare.js 在 linux 服务器上 headless 运行 Electron (atom-shell)

python - tornado.database 导入错误 : No module named database

ruby-on-rails - Paperclip-ffmpeg 在heroku上不起作用

node.js - 如何组合两个都需要监听端口的 Express 模块?

heroku - 当另一个域指向它时如何在 heroku 上的应用程序中指定规范链接

node.js - Heroku 在 Yeoman MEAN 应用程序的 Procfile 中找不到 ./node_modules/.bin/forever

node.js - 如何将 angular 4 添加到现有的 node.js 应用程序