Chrome Cookie API不是't不允许我使用返回值

Chrome Cookie API isn't letting me use returned values

本文关键字:允许我 不允许 返回值 API Cookie 不是 Chrome      更新时间:2023-09-26

我正在制作一个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
});

如果您不喜欢传递回调,也可以修改函数以返回deferred。如果您必须处理大量异步函数调用,那么延迟会让您的生活轻松很多。这里有一个使用jQuery的例子。递延:

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