2011-11-16 74 views
0

我试图创建一个小的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

这将是将异步请求转换为同步请求的唯一方法。

是的,它看起来很可怕,而且很丑陋; ,因为它是

我知道,我不知道的和你的库出来的全部,但我会建议你(和你的用户)应拥抱异步请求,而不是试图面具他们。出于某种原因,HTTP请求在JavaScript中是异步的;他们不锁定浏览器。在请求期间,同步请求完全锁定浏览器。如果您不小心,如果HTTP请求太长,您的用户将在大多数浏览器上收到一条警告,告诉他们脚本已停止执行;并为他们提供禁用脚本的选项。

+0

是的,我同意,不幸的是,有几点我将要掩盖异步性,只是希望有一个更好的解决方案。大多数时候异步请求都很快,它们都是通过本地服务器运行的,但我想我可以选择性地屏蔽哪些行为,并且只在完全必要时才屏蔽。不过谢谢 –