node.js - 在 Node/Express 应用程序中延迟超过一小时的触发功能
问题描述
我想在调用特定端点后延迟 1 小时或 5 小时触发我的快速应用程序中的功能。
我尝试在我的控制器中使用一个简单setTimeout
的then
enpoint 链中的类似内容:
function(req, res, next) {
return mailer.sendEmail(req.user, 'firstEmail') // returns a promise
.then(function(emailResult) {
if (emailResult == 'ok') {
res.sendStatus(200).json({ message: 'You will receive an email in 1 hour' }) // set positive API json response
} else {
res.sendStatus(200).json({ message: 'You will receive an email in 5 hour' }) // set negative API json response
}
return emailResult
})
.then(function(emailResult){
return new Promise((resolve, reject) => {
setTimeout(function(){
return return mailer.sendEmail(req.user, 'secondEmail')
}, emailResult == 'ok' ? 60 * 60 * 1000 : 5 * 60 * 60 * 1000) // 1 hour or 5 hours
})
})
})
并且似乎有效,但我有两个主要问题:
- 如果我使用 (pm2 startOrReload prod.json) 重新启动我的应用程序的 pm2 进程,所有超时都被取消了吗?
- 如果我在这个系统上安排了类似 600 次超时,我会遇到任何性能问题吗?
有这样的经验吗?
解决方案
- 是的,您的所有超时都将被取消,因为它们已存储在内存中
- 我认为 600 超时可能不是问题,但您可能会找到更合适的方法,例如将所有超时排序的数组和一个 setInterval 来检查是否需要执行某些操作。
推荐阅读
- angular - 从验证器内部的组件中获取值
- python - kivy 中的跳棋板
- flutter - 任务 ':app:compileFlutterBuildDebug' 执行失败。> 进程 'command 'C:\flutter\bin\flutter.bat'' 以非零退出值 1 结束
- networkx - 使用networkx GraphMatcher时我们可以简单地获取图的边缘吗?
- c++ - 元组的 C++ priority_queue 很慢
- python - Toolwiz Time Freeze 设置远程注册 Win 10
- linux - LD_PRELOAD 覆盖动态加载库中的函数
- mysql - 从MYSQL sql中的搜索结果中获取所有数据
- python - 如何在numpy中评估n个变量中的函数?
- assembly - 在程序集中绘制精灵 80386