ローカルストレージにWebSQLを使用するChromeのブラウザ拡張機能を作成しています。これらのコンポーネントの両方のコードは、非同期操作に大きく依存しているようです。私は非同期操作についてはよく理解していますが、これに大きく依存するコードを作成した経験はあまりありません。
例えば:
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ループでグローバルフラグ/カウンターを使用することを考えましたが、これはアプリケーションがハングする傾向があるようです。