gpt4 book ai didi

javascript - 如果您在请求触发后订阅它,是否有可能在 JS 中将异步事件设为 "miss"?

转载 作者:行者123 更新时间:2023-11-30 08:13:42 24 4
gpt4 key购买 nike

这是一个简单的片段来执行 Ajax 请求

var req = new XMLHttpRequest();
req.open('GET', 'http://www.mozilla.org/', true);
req.send(null); // First - send the request
// Then bind for the "result"
req.onreadystatechange = function (e) {
if (req.readyState == 4 && req.status == 200) {
// ...
}
};

我在这里做什么:

  1. 发送 Ajax 请求。
  2. 然后绑定(bind)结果回调。

如果您认为此代码是多线程的 - 很明显,您可以在请求完成后(由于调度)绑定(bind)到 onreadystatechage,并且它永远不会被调用。

但在基于 react 器的代码中,这将始终按预期工作,因为 react 器将在我的所有代码完成该迭代的运行后才会运行。

在浏览器中是什么情况?这在某处记录了吗?

忽略 Ajax 请求是一件很慢的事情并且这在实践中可能永远不会发生的事实。我只是将其作为一个异步示例(如果 ajax 对您来说太慢,请考虑 websocket)。

最佳答案

从这个意义上说,JavaScript 不是多线程的。 said.send(null) 之后,您将完成当前代码块的执行,其中包括 onreadystatechange,然后才会触发事件。您的代码不会在事件触发的这两句话之间中断 - 事件将被添加到事件队列(如果您愿意,可以缓冲),并且当有时间时,事件将触发,调用与其关联的所有处理程序.它应该调用在创建 XMLHttpRequest 对象和触发事件之间添加的处理程序。

至少,这是我对这个问题的解释。如需更多信息,请访问 Timing and synchronization in Javascript , 在 dev.opera.

关于javascript - 如果您在请求触发后订阅它,是否有可能在 JS 中将异步事件设为 "miss"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6973264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com