Javascript 在ExpressJS中,如何在一段时间后从字典中删除对象

Javascript 在ExpressJS中,如何在一段时间后从字典中删除对象,javascript,node.js,express,Javascript,Node.js,Express,假设我们有一个字典,里面有这样的值 const members = { "NAME1": "TEST1", "NAME2": "TEST2", "NAME3": "TEST3" }; 我们如何在特定时间段后删除一个值,比如说5分钟。 注意,我们在Nodejs/ExpressJS服务器上使用它,它不能阻止整个服务器。它必须是一根线或类似的东西 删除['NAME1']然后我们称之为。 做这件事的正确方法是什么?我试着循环并睡眠5分钟,但这不起作用,因为它会阻塞整个服务器,直到睡眠消失。您正在查找s

假设我们有一个字典,里面有这样的值

const members = {
"NAME1": "TEST1",
"NAME2": "TEST2",
"NAME3": "TEST3"
};
我们如何在特定时间段后删除一个值,比如说5分钟。 注意,我们在Nodejs/ExpressJS服务器上使用它,它不能阻止整个服务器。它必须是一根线或类似的东西

删除['NAME1']
然后我们称之为。
做这件事的正确方法是什么?我试着循环并睡眠5分钟,但这不起作用,因为它会阻塞整个服务器,直到睡眠消失。

您正在查找
setTimeout
delete
关键字:

让成员={
“NAME1”:“TEST1”,
“名称2”:“测试2”,
“NAME3”:“TEST3”
};
常数1秒=1000;
设置超时(()=>{
删除成员['NAME2'];
控制台日志(成员);
},1秒*3);

控制台日志(成员)
您正在查找
setTimeout
delete
关键字:

让成员={
“NAME1”:“TEST1”,
“名称2”:“测试2”,
“NAME3”:“TEST3”
};
常数1秒=1000;
设置超时(()=>{
删除成员['NAME2'];
控制台日志(成员);
},1秒*3);


控制台日志(成员)
记住这是一个nodeJS服务器,我的其他操作在看到函数时是否会被卡住,setTimeout()?
setTimeout
会将函数推送到事件队列上。它没有阻塞。是的,刚刚测试过,谢谢!我会确保在几分钟内将其标记为正确答案。请随意接受答案。这样其他用户一眼就能看出问题已经得到了回答。记住,这是一个nodeJS服务器,我的其他操作在看到函数时会被卡住吗?setTimeout()?
setTimeout
会将函数推到事件队列上。它没有阻塞。是的,刚刚测试过,谢谢!我会确保在几分钟内将其标记为正确答案。请随意接受答案。这样其他用户一眼就能看出问题已经得到了回答。Node.js中没有线程,我怀疑永远不会有线程——他们已经围绕事件循环明确地设计了所有内容。这意味着节点中发生的一切要么是处理队列外事件的事件处理程序,要么是将下次要处理的事件排入队列的事件发射器。两者都会在执行期间阻止单个Node.js线程。就这些。睡眠只是设置一个超时,这将导致在适当的时间内处理任务。您可以通过执行忙循环来阻止,但这只是浪费Node.js处理时间。我所描述的内容在“Node.js核心概念”一节中有详细说明。我想您需要问问自己,当您可以立即删除某些内容时,为什么要延迟删除?您是否正在尝试对未使用或过时的缓存项或其他类型的数据结构进行“清理”?你为什么不描述一下你到底在设计什么?但是不可以,
setTimeout
可以被多次调用,并且只会导致在指定的时间段过后安排相同数量的任务(对指定为
setTimeout
参数的函数的调用)。替换您先前请求的预定调用的唯一方法是调用
clearTimeout
。您为什么不在指定位置阅读它呢:,尤其要注意函数的返回值。我理解。好的,简单地解释一下,您可以使用
setTimeout
调用来调度任务,该调用返回一个标识符(一个数字),您可以随时使用该标识符来取消带有
clearTimeout
的任务。Node.js中没有线程,我怀疑永远不会有线程——它们已经明确地围绕事件循环设计了所有内容。这意味着节点中发生的一切要么是处理队列外事件的事件处理程序,要么是将下次要处理的事件排入队列的事件发射器。两者都会在执行期间阻止单个Node.js线程。就这些。睡眠只是设置一个超时,这将导致在适当的时间内处理任务。您可以通过执行忙循环来阻止,但这只是浪费Node.js处理时间。我所描述的内容在“Node.js核心概念”一节中有详细说明。我想您需要问问自己,当您可以立即删除某些内容时,为什么要延迟删除?您是否正在尝试对未使用或过时的缓存项或其他类型的数据结构进行“清理”?你为什么不描述一下你到底在设计什么?但是不可以,
setTimeout
可以被多次调用,并且只会导致在指定的时间段过后安排相同数量的任务(对指定为
setTimeout
参数的函数的调用)。替换您先前请求的预定调用的唯一方法是调用
clearTimeout
。您为什么不在指定位置阅读它呢:,尤其要注意函数的返回值。我理解。好的,简单地解释一下,您可以使用
setTimeout
调用来调度任务,该调用返回一个标识符(一个数字),您可以随时使用该标识符来取消任务
cleartimout