首页 > 解决方案 > 在 Node/Express 应用程序中延迟超过一小时的触发功能

问题描述

我想在调用特定端点后延迟 1 小时或 5 小时触发我的快速应用程序中的功能。

我尝试在我的控制器中使用一个简单setTimeoutthenenpoint 链中的类似内容:

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
    })
  }) 
})

并且似乎有效,但我有两个主要问题:

有这样的经验吗?

标签: node.jsexpresspromisesettimeout

解决方案


  • 是的,您的所有超时都将被取消,因为它们已存储在内存中
  • 我认为 600 超时可能不是问题,但您可能会找到更合适的方法,例如将所有超时排序的数组和一个 setInterval 来检查是否需要执行某些操作。

推荐阅读