API Chrome Cookie не позволяет мне использовать возвращаемые значения - PullRequest
4 голосов
/ 18 июня 2011

Я делаю расширение Chrome, которое устанавливает cookie, когда пользователи входят в систему. Когда я пытаюсь прочитать cookie, используя метод chrome.cookies.get(), обратный вызов может регистрировать результаты, но я не могу передать его из обратного вызова.

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;
}

Я пытался использовать несколько разных способов передачи результата, но кажется, что объект не определен, если он не вызывается из-за обратного вызова.

1 Ответ

4 голосов
/ 18 июня 2011

Проблема в том, что ваш обратный вызов называется после , когда возвращается основная функция.(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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...