关闭函数的先前实例nodejs

用户名

我在nodejs上有一个api构建。收到一个用户的第一个请求后,我想触发一个发送电子邮件功能,该功能在15分钟后发送邮件。但是,如果在这15分钟内对同一用户发出了新请求,我想关闭以前的计时器,并从15分钟后重新启动计数器。

我面临的问题是如何检查以前是否已对api进行过任何调用。

我想到的一种可能的解决方案是在db中存储一个标志,并在每个api调用上进行更新,这将告诉用户是否已触发sendEmail。但是也许我可以,尽管在运行时使用一个变量来存储以前的状态也可能实现。有可能这样做吗?

jfriend00

假设您为每个用户都有一些唯一的标识符。然后,您可以仅创建一个Map以userID作为键的对象,而数据的对象则包含一个计时器作为值。

const userEmailData = new Map();

function sendUserEmailWithDelay(userId, emailContent) {
    let userData = userEmailData.get(userId);
    // if existing userData, then clear existing timer
    if (userData) {
        clearTimeout(userData.timer);
    }

    // set new timer for 15 minutes from now
    userData = {userId, emailContent, timer};
    let timer = setTimeout(() => {
        // remove our object from the Map
        userEmailData.delete(userId);
        // send the email here using userData to know what to send and to whom
    }, 15 * 60 * 1000);

    // put this userData object into the Map
    userEmailData.set(userId, userData);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查看匹配搜索键的先前实例的函数

来自分类Dev

如何在关闭应用程序并显示先前保存的实例时恢复用户的先前数据?

来自分类Dev

如何在关闭应用程序并显示先前保存的实例时恢复用户的先前数据?

来自分类Dev

NodeJS - 从函数返回对象会覆盖该对象的先前声明

来自分类Dev

nodejs中模块函数/类的实例

来自分类Dev

NodeJS在创建新服务器之前关闭先前的服务器端口

来自分类Dev

删除模式中的先前实例

来自分类Dev

Wix:多个实例删除了先前的实例

来自分类Dev

关闭和多个实例

来自分类Dev

关闭检查的实例

来自分类Dev

OpsWorks实例关闭

来自分类Dev

VMWare Player关闭实例

来自分类Dev

如何关闭fullCalendar中的先前弹出窗口?

来自分类Dev

覆盖先前声明的TypeScript函数

来自分类Dev

查询返回先前函数的内容

来自分类Dev

根据先前输入的乘法函数

来自分类Dev

还原AWS Appsync模式的先前实例

来自分类Dev

从Rails中的先前请求获取实例变量

来自分类Dev

循环浏览先前的类实例结果

来自分类Dev

实例化和关闭Realm实例

来自分类Dev

实例化和关闭Realm实例

来自分类Dev

使用Java关闭Tomcat实例

来自分类Dev

关闭Shell.Application实例

来自分类Dev

使用Java关闭Tomcat实例

来自分类Dev

类实例上的PHP关闭

来自分类Dev

如何从NSObject实例关闭窗口

来自分类Dev

仅关闭JFrame的单个实例?

来自分类Dev

VLC虚拟实例不可关闭

来自分类Dev

javascript函数关闭工作