Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery延迟在调用之前未等待。完成_Javascript_Jquery_Google Chrome Extension - Fatal编程技术网

Javascript jquery延迟在调用之前未等待。完成

Javascript jquery延迟在调用之前未等待。完成,javascript,jquery,google-chrome-extension,Javascript,Jquery,Google Chrome Extension,我正在使用defer的.done来等待在函数完成之前加载cookie。当我尝试运行代码时,它会完成并返回undefined。看起来是这样的。完成就是在第一个代码完成之前触发 function getCookie(cookieName){ var value; var defer = new jQuery.Deferred(); fetchCookie().done( function(){ return value;

我正在使用defer的.done来等待在函数完成之前加载cookie。当我尝试运行代码时,它会完成并返回undefined。看起来是这样的。完成就是在第一个代码完成之前触发

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

延迟对象不允许您避免回调。您仍然需要这样做(假设所有操作都正确实现):

它只会产生不必要的开销。我宁愿简单地做:

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

该方法工作正常,但理想情况下,我希望使用getCookie()函数返回cookie的值,就像我在代码中描述的那样。有没有一种聪明的方法可以强制函数等待返回值。我知道我可以使用setInterval(),但它似乎太笨重了。谢谢@devnill我不知道除了使用计时器之外还有什么方法。
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);
});