jquery在调用之前没有等待.done

时间:2011-06-30 08:58:43

标签: javascript jquery google-chrome-extension

我正在使用defer的.done等待在函数完成之前加载cookie。当我尝试运行代码时,它完成并返回undefined。似乎.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 个答案:

答案 0 :(得分:2)

延迟对象不会让您避免回调。你仍然需要做这样的事情(假设一切都正确实现):

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