我正在尝试创建一个小的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
}
但它看起来像是一个丑陋的黑客,有没有人有更好的方法来做这个?
答案 0 :(得分:0)
这是将异步请求转换为同步请求的唯一方法。
是的,它看起来很可怕,也很丑陋; 因为它是。
我知道我不知道您图书馆的完整内容,但我建议您(和您的用户)拥抱异步请求而不是尝试掩码他们。出于某种原因,HTTP请求在JavaScript中是异步的;他们没有锁定浏览器。同步请求在请求期间完全锁定浏览器。如果您不小心,如果HTTP请求太长,您的用户将在大多数浏览器上收到警告,告诉他们脚本已停止执行;并为他们提供禁用脚本的选项。