2011-11-16 110 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

是的,我同意,不幸的是,有幾點我將要掩蓋異步性,只是希望有一個更好的解決方案。大多數時候異步請求都很快,它們都是通過本地服務器運行的,但我想我可以選擇性地屏蔽哪些行爲,並且只在完全必要時才屏蔽。不過謝謝 –