【发布时间】:2020-10-06 12:32:17
【问题描述】:
我正在尝试理解 Node JS 中的事件循环。网上有很棒的资源,但我一直在想同样的事情。场景如下:
对于 Javascript/节点 在带有 getData 按钮的网页上。 用户单击按钮,然后向服务器发送到 getData 路由的请求(在这个简化的场景中,当服务器获取数据时,它会返回一个显示数据的新页面)。数据请求被异步卸载到 Node API(并在调用堆栈之外)。 在 api 返回用户在浏览器中更改页面的数据之前,会向服务器发送一个新的 http 请求以获取不同的页面,这会触发 http.get(url, callback) 将新页面添加到要加载的回调队列中(这会击败数据请求并返回新页面)。
现在冗余数据的旧回调会发生什么?大概当事件循环到达 cb 队列中的 getData 回调时,它会尝试运行回调函数。 Node会发送响应以再次与数据显示页面一起更改页面吗?如果是 Ajax 并且页面更改后返回的数据在这种情况下回调会发生什么,ajax 是否会简单地忽略新的不同页面上返回的数据?
我知道 Ajax 处理页面更新,但我想简化以了解事件循环如何处理调用堆栈已移动且旧回调不再有用的情况。
感谢您的回复,他们非常有用!我唯一要补充的是(我知道这种情况需要非常糟糕的服务器设计,但理论是我在这里感兴趣的)如果服务器确实响应用户不再需要的页面(由于异步延迟响应),浏览器是否理解这不是最近的请求?我认为由于 http 是无状态的,浏览器将通过 TCP 接收响应并重新加载先前请求的页面(让客户感到沮丧)。
非常感谢!
【问题讨论】:
-
Node.js 没有在您的浏览器中运行。
-
关闭@BraveButter 谢谢你,但它并不能完全回答当回调不再有目的时会发生什么。
标签: javascript node.js event-loop