jquery defer не ждет перед вызовом .done - PullRequest
0 голосов
/ 30 июня 2011

Я использую defer .done, чтобы дождаться загрузки куки до завершения функции.Когда я пытаюсь запустить код, он заканчивается и возвращает неопределенное.Похоже, что .done срабатывает до того, как первый код может закончить.

function getCookie(cookieName){
    var value;
    var defer = new jQuery.Deferred();
    fetchCookie().done(
        function(){
            return value;
        }
    );
    function fetchCookie(){
        chrome.cookies.get(
            {
            'url':'https://addictedtogether.com/',
            'name':cookieName
            },
            function(data){
                console.log(data);
                value=data.value;
            }
        );
        return defer.promise();
    }
}

//usage
var username=getCookie('username');

1 Ответ

2 голосов
/ 30 июня 2011

Отложенные объекты не позволят вам избежать обратных вызовов.Вам все еще нужно будет делать что-то вроде этого (при условии, что все реализовано правильно):

getCookie('username').then(function(username){
    console.log(username);
});

Это просто приведет к ненужным накладным расходам.Я бы предпочел просто сделать:

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

//usage
getCookie('username', function(username){
    console.log(username);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...