2011-06-17 5 views
4

ユーザーがログインするときにCookieを設定するChrome拡張機能を作成しています。chrome.cookies.get()メソッドを使用してCookieを読み込もうとすると、コールバックで結果は記録されますが、それはコールバックの外です。 Chrome Cookie APIで戻り値を使用できない

function getCookie (cookieName){ 
    var returnVal; 
    chrome.cookies.get({ 
     'url':'https://addictedtogether.com/', 
     'name':cookieName 
    }, 
    function(data){ 
     console.log(data); //log displays returned cookie in a object 
     returnVal=data; 
    } 
    ); 
    console.log(returnVal); //log says this is undefined 
    return returnVal; 
} 

は、私は結果を渡すのカップルさまざまな方法を使用してみましたが、それは、コールバック内から呼び出されない限り、オブジェクトが定義されていないように思えます。

答えて

4

問題は、のメイン関数が返された後にコールバックがと呼ばれるという問題です。 (拡張APIは理由により非同期と呼ばれます)returnValはまだ割り当てられていないため、未定義です。コールバックの引数を受け入れるようにあなたの関数を変更してみてください。あなたの周りのコールバックを渡して気に入らない場合、あなたはまた延期返すために、あなたの関数を修正することができる

function getCookie (cookieName, callback){ 
    chrome.cookies.get({ 
     'url':'https://addictedtogether.com/', 
     'name':cookieName 
    }, 
    function(data){ 
     callback(data); 
    }); 
} 

// Use like this: 
getCookie("CookieName", function(cookieData){ 
    // Do something with cookieData 
}); 

。多くの非同期関数呼び出しを処理する必要がある場合、遅延はあなたの人生を楽にします。次に、jQuery.Deferredを使用した例を示します。

function getCookie (cookieName){ 
    var defer = new jQuery.Deferred(); 
    chrome.cookies.get({ 
     'url':'https://addictedtogether.com/', 
     'name':cookieName 
    }, 
    function(data){ 
     defer.resolve(data); 
    }); 
    return defer.promise(); 
} 
// Example use: 
getCookie("FooBar").done(function(data){ 
    // Do something with data 
}); 
+0

これは関数パラメータです。 'getCookie'の第2引数として関数を渡します。 – Na7coldwater

+0

最初の例を使ってみましたが、 'Callback(data);'行で 'Uncaught TypeError:undefined is a function'というエラーを投げました。私は 'callback'変数の構文を理解していないと確信しています。私は 'getCookie'の中でコールバック関数を作ることになっていますか?もしそうなら、なぜそれを' getCookie'に渡すものとして定義する必要がありますか? – devnill

+0

私の答えを編集し、サンプルの使い方を含めました。 – Na7coldwater

関連する問題