[英]async control flow in javascript
我正在為chrome瀏覽器擴展程序編寫擴展程序,該擴展程序使用Web SQL進行本地存儲。 這兩個組件的代碼似乎都嚴重依賴異步操作。 我對異步操作有很好的了解,但沒有大量的經驗來編寫依賴於異步操作的代碼。
例如:
var CSUID = "";
//this is an async callback for handling browser tab updates
function checkForValidUrl(tabId, changeInfo, tab) {
getCookies("http://www.cleansnipe.com/", "CSUID", handleCookie);
if(CSUID != ""){ //this could be in handleCookie if i could access the tab
//do stuff with the tab
}
}
function handleCookie(cookie) {
if (cookie != "" && cookie != null) {
CSUID = cookie;
}
}
為了克服缺乏向/從這些處理程序傳遞/返回變量的能力,我發現自己創建全局變量並將其設置在處理程序中。 當然,這不能按預期工作,因為經常在執行回調之前訪問變量。
處理這種情況的最佳實踐是什么? 我以為使用帶有while循環的全局標志/計數器來暫停執行,但這似乎很容易導致應用程序掛起。
如果選擇使用jQuery,則它具有稱為延遲對象的漂亮系統。 它允許對情況的優美而有效的管理-或視情況而定或不同而實際上是同步的。
(遞延不僅限於jQuery,但jQuery有一個不錯的API)。
這是一個純粹的示例,僅用於演示該概念。
//get data func
function get_data(immediate) {
//if immediate, return something synchonously
if (immediate)
return 'some static data';
//else get the data from something over AJAX
else
return $.get('some_url');
}
//two requests two get data - one asynchronous, one synchronous
var data1 = get_data(true), data2 = get_data();
//do something when both resolved
$.when(data1, data2).done(function(data1, data2) {
//callback code here...
});
遞延者不必參與AJAX; 您可以創建自己的延遲對象(jQuery的AJAX請求自動生成並返回它們)並手動解析/拒絕它們。 幾個月前,我在此發表了一篇博客文章 -可能會有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.