为什么在使用 Express 应用程序时 setTimeout 仍然有效?
Why does setTimeout still work when using an Express app?
我正在制作一个 Express 应用程序,我打算在一段时间后使用 setTimeout 使与第三方 API 一起使用的访问令牌失效。我认为它可能行不通,因为像 setTimeout 这样的异步函数被推送到事件队列中,并且在其他所有事情完成之前 运行 不会 运行ning。 Express 应用程序(我假设)总是 运行ning 因为它一直在监听请求所以我认为由于程序永远不会完成,setTimeout 永远不会 运行。但是 setTimeout 运行 很好而且准时。
怎么还有可能? Express的监听部分是不是有非JS的东西,还是我误解了async和事件队列?
Express 服务的所有请求都像 setTimeout()
一样通过事件队列,因此它们共享相同的事件队列并且可以很好地交错。
因此,当传入请求到达 Express 服务器时,一些较低级别的 TCP 代码会将传入连接插入到事件队列中。下一次 Express 完成执行某事时,nodejs 解释器返回事件队列并获取下一个事件。这可能是下一个传入请求,可能是服务请求时的一些中间异步操作(例如数据库查询完成),也可能是您的 setTimeout()
.
事件通常以 FIFO(先进先出)的方式提供,尽管当队列中有多种不同类型的事件等待 运行.
The Express app (I'm assuming) is always running because it's always listening for requests so I thought that since the program never finishes, the setTimeout would never run. But the setTimeout ran just fine and on time.
“始终运行ning”,在这种情况下,仅表示它已准备好并等待传入请求。只要 JS 解释器 returns 返回到下一个事件的事件循环,事件队列中的其他东西(比如计时器)就能够 运行 就好了。
我正在制作一个 Express 应用程序,我打算在一段时间后使用 setTimeout 使与第三方 API 一起使用的访问令牌失效。我认为它可能行不通,因为像 setTimeout 这样的异步函数被推送到事件队列中,并且在其他所有事情完成之前 运行 不会 运行ning。 Express 应用程序(我假设)总是 运行ning 因为它一直在监听请求所以我认为由于程序永远不会完成,setTimeout 永远不会 运行。但是 setTimeout 运行 很好而且准时。
怎么还有可能? Express的监听部分是不是有非JS的东西,还是我误解了async和事件队列?
Express 服务的所有请求都像 setTimeout()
一样通过事件队列,因此它们共享相同的事件队列并且可以很好地交错。
因此,当传入请求到达 Express 服务器时,一些较低级别的 TCP 代码会将传入连接插入到事件队列中。下一次 Express 完成执行某事时,nodejs 解释器返回事件队列并获取下一个事件。这可能是下一个传入请求,可能是服务请求时的一些中间异步操作(例如数据库查询完成),也可能是您的 setTimeout()
.
事件通常以 FIFO(先进先出)的方式提供,尽管当队列中有多种不同类型的事件等待 运行.
The Express app (I'm assuming) is always running because it's always listening for requests so I thought that since the program never finishes, the setTimeout would never run. But the setTimeout ran just fine and on time.
“始终运行ning”,在这种情况下,仅表示它已准备好并等待传入请求。只要 JS 解释器 returns 返回到下一个事件的事件循环,事件队列中的其他东西(比如计时器)就能够 运行 就好了。