【问题标题】:How to fire a function at specific time in the future in node.js?如何在 node.js 中的未来特定时间触发函数?
【发布时间】:2018-11-04 12:45:21
【问题描述】:

示例:我有200 000 users,注册后必须在30 day 收费。他们都有不同的注册日期。因此,每个用户的收费日期都会有所不同。

谷歌搜索后,我发现了这个库Node Schedule,它可以在特定时间触发一个函数。我在注册时为每个用户设置付款日期。例如,用户在17:36注册,那么他的付款日期将是17:36 after 30 days

node-schedule 的代码如下所示:

var schedule = require('node-schedule');

schedule.scheduleJob(chargingDateFromDB, () => {
  console.log('The payment is done and new date for charging is set);
});

这样,我相信,节点会将每个计划的信息存储在操作内存中,并将其保存到30 days,并在支付下一个30 days等之后......

所以我对性能有疑问。有没有更好的方法来实现每月订阅?我向用户收费的方式是常用的还是必须有更有效的方式?

【问题讨论】:

  • 您为什么要在一天中的不同时间向不同的用户收费?通常系统只是为当天做一个批量账单——一个事件在早上 6:00 运行,查找当天必须付款的每个人,然后向他们开账单。付款日期通常是固定的,因此您可能每次都在每月 1 日付款,但像 Google 音乐这样的订阅确实会让您在订阅当天付款。无论如何,我还没有听说过为每个用户安排单独付款的系统。
  • 所以计划可能是这样的:每天早上检查每个用户的paymentDate,如果paymentDate makePayment()。类似的东西?
  • 好吧,你会做类似paymentDate = todayDate的事情。您基本上会尝试检查付款日期是否是 21 日,而今天是 21 日,然后付款。当然,您必须小心月末日期和二月,但要判断何时处理它们并使其正常化。虽然如果您想要正好 30 天,而不是按月付款,那么您必须以某种方式检查 (today - lastPaymentDate) = 30,但这可以缓解您的月末处理问题。

标签: javascript node.js dom-events


【解决方案1】:

让 ONE 计划每天运行,选择需要收费的用户,然后进行收费。

【讨论】:

  • 查看我对 vlaz 的评论。听起来像你的答案。
  • 嗯,是的。好像我们是在同一时刻写的……您的问题是关于安排帐单=> 最佳做法是使用一个时间表并一次性完成一天中的所有帐单。这里的“计费”只是一个例子。
  • PS:是的,您需要考虑如何“选择要收费的用户”=> 例如,最后一次收费超过 30 天的用户。将取决于您的付款计划
猜你喜欢
  • 2023-03-27
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 2020-10-15
相关资源
最近更新 更多