我正在为 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 循环的全局标志/计数器来暂停执行,但这似乎很容易导致应用程序挂起。