javascript - Chrome Cookie API 不允许我使用返回值

标签 javascript cookies google-chrome-extension

我正在制作一个 chrome 扩展,它在用户登录时设置一个 cookie。当我尝试使用 chrome.cookies.get() 方法读取 cookie 时,回调可以记录结果,但我无法将其传递出回调。

function getCookie (cookieName){
    var returnVal; 
    chrome.cookies.get({
        'url':'https://addictedtogether.com/',
        'name':cookieName
    },
    function(data){
        console.log(data); //log displays returned cookie in a object
        returnVal=data;
    }
    );
    console.log(returnVal);  //log says this is undefined
    return returnVal;
}

我尝试使用几种不同的方式来传递结果,但似乎该对象是未定义的,除非它是从回调中调用的。

最佳答案

问题是您的回调是在主函数返回后调用的。 (扩展 API 被称为异步是有原因的!)returnVal 未定义,因为它尚未分配给它。尝试修改您的函数以接受回调参数:

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

// Use like this:
getCookie("CookieName", function(cookieData){
  // Do something with cookieData
});

如果您不喜欢传递回调,您也可以修改您的函数以返回延迟。如果你必须处理大量的异步函数调用,deferreds 会让你的生活轻松很多。下面是一个使用 jQuery.Deferred 的示例:

function getCookie (cookieName){
    var defer = new jQuery.Deferred();
    chrome.cookies.get({
        'url':'https://addictedtogether.com/',
        'name':cookieName
    },
    function(data){
        defer.resolve(data);
    });
    return defer.promise();
}
// Example use:
getCookie("FooBar").done(function(data){
  // Do something with data
});

关于javascript - Chrome Cookie API 不允许我使用返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6392547/

相关文章:

javascript - Angular7:模板解析错误:找不到管道 'titlecase'/'slice'

javascript - 如何从 React JS (ES6) 中的对象内的数组中删除元素

javascript - Express 提供的客户端 React 应用程序上一致的 url 路由

java servlet在JSP中获取cookie值

javascript - 事件页面中的键盘事件

javascript - Cordova 媒体捕获.CaptureAudio - "Error code: undefined"

javascript - 如何使用 pubsub 模拟器在本地调用 firebase Schedule 函数

python - 如何在 Selenium 中使用命令行选项启动 PhantomJS?

google-chrome - Chrome 扩展导致 "Uncaught (in promise) Error: Cannot access a chrome://URL"

javascript - 如何从扩展程序中获取当前 chrome 选项卡的 AST?