Javascript jquery延迟在调用之前未等待。完成
我正在使用defer的.done来等待在函数完成之前加载cookie。当我尝试运行代码时,它会完成并返回undefined。看起来是这样的。完成就是在第一个代码完成之前触发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;
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);
});