我正在制作一个chrome扩展程序,在用户登录时设置一个cookie。当我尝试使用chrome.cookies.get()
方法读取cookie时,回调可以记录结果,但我无法将其传递回回调。< / p>
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;
}
我尝试使用几种不同的方式传递结果,但似乎对象是未定义的,除非从回调中调用它。
答案 0 :(得分:4)
问题是在主函数返回之后,你的回调被称为。 (扩展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
});
如果你不喜欢传递回调,你也可以修改你的函数以返回延迟。如果你必须处理很多异步函数调用,延迟会让你的生活变得更轻松。这是一个使用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
});