gpt4 book ai didi

javascript - 模拟同步 XmlHttpRequest

转载 作者:行者123 更新时间:2023-11-30 18:56:36 25 4
gpt4 key购买 nike

我已经阅读了其他一些相关问题(Pattern for wrapping an Asynchronous JavaScript function to make it synchronousMake async event synchronous in JavaScript 以及可能还有更多),但我只是想确保穷尽所有可能性。

是否可以使用 setInterval 或 setTimeout 将异步 XmlHttpRequest“转换”为准同步请求?

想法是在 Ajax 请求成功后将设置一个变量,这将是 while 循环(已调用 setInterval 或 setTimeout,以及适当的回调函数)退出的信号。还是我从根本上误解了 setInterval 和/或 setTimeout 的能力(或限制?)?

最佳答案

没错,您不想按照您描述的方式使用 setInterval 和 setTimeout。您真正想要做的只是熟悉嵌套函数,您可以在其中以或多或少同步的方式编写。

例如:

XHR.get(your_data, function()
{
//what you would have done "synchronously"
});

虽然您可以使用 setInterval 和/或 setTimeout(在函数体中再次调用 setTimeout)来“轮询”成功代码,但这种方法远不如首先处理回调而不是轮询它。它引入了延迟,与 CPU 失控,并且不能跨多个 XHR 请求扩展,仅举几个缺点。

XHR 会在它完成时调用您的函数,运行一个询问“Are we done yet?Are we done yet?”的函数毫无意义。同时。另一方面,如果您想要阻止某些周期性行为,直到响应返回(例如,一段需要该数据运行的动画),在 if 语句中包围阻塞代码是完全可以接受的:

var tick = window.setTimeout(tock, 20);
var tock = function()
{
if (response_done)
{
// dependent code
}
tick = window.setTimeout(tock, 20);
}
XHR.get(your_data, function() { /*Handle response*/ response_done = true; });

关于javascript - 模拟同步 XmlHttpRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1809931/

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