javascript - jquery defer 在调用 .done 之前不等待

标签 javascript jquery google-chrome-extension

我正在使用 defer 的 .done 来等待函数完成之前加载 cookie。当我尝试运行代码时,它完成并返回未定义。看起来 .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);
});

关于javascript - jquery defer 在调用 .done 之前不等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6532375/

相关文章:

javascript - 在没有浏览操作的情况下捕获 chrome 选项卡

linux - 构建 Google Chrome NaCl 应用程序 .nexe 文件时找不到有效的库

javascript - 如何使 Owl Carousel 点导航按钮易于访问?

javascript - Puppeteer 同步定义浏览器和页面

javascript - Node.js 使用数据重新加载模板

jQuery - 组合 <select> 和复选框时出错

javascript - 从 chrome 扩展程序发送电子邮件(gmail)

javascript - 如何禁用 html 表格行

javascript - 如何更改 React 中点击事件的状态?

javascript - 使用jquery滚动页面时添加bootstrap类