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

jquery defer not waiting before calling .done

本文关键字:等待 done defer 调用 jquery      更新时间:2023-09-26

我使用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');

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

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