我正在使用 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/