我正在尝试创建一个小的javascript框架,使其在处理第三方库时变得更容易。这个库主要是异步的,因此,例如,要建立连接,您可以使用以下代码:
var com = establishConnection("api-key");
com.onsuccess = function(c) {
c.submit("something");
};我想要的是能够使用我的包装器框架来简单地执行以下操作
var com = establishConnection("api-key");
com.submit("something");显然,我需要一种方法来处理原始库的异步特性,因此它将等待连接建立后再执行命令。我知道我可以做一些事情,比如设置一个标志来表明连接是否已建立,然后使用某种循环延迟,即
function submit(msg) {
while (!connectionEstablished) {}
// do submit stuff
}但这看起来像是一个丑陋的黑客,有没有人有更好的建议来做这件事呢?
发布于 2011-11-16 18:08:45
这将是将异步请求转换为同步请求的唯一方法。
是的,它看起来很可怕,也很丑陋;因为它是,所以才是。
我知道我不知道你的库的全部输入和输出,但我建议你(和你的用户)应该接受异步请求,而不是试图掩盖它们。HTTP请求在JavaScript中是异步的,这是有原因的;它们不会锁定浏览器。在请求期间,同步请求会完全锁定浏览器。如果您不小心,如果HTTP请求太长,您的用户将在大多数浏览器上收到警告,告诉他们脚本已停止执行;并为他们提供禁用脚本的选项。
https://stackoverflow.com/questions/8149786
复制相似问题