Javascript 从本地存储检索数据

Javascript 从本地存储检索数据,javascript,jquery,google-chrome-extension,Javascript,Jquery,Google Chrome Extension,我试图从localStorage中检索一个正在工作的字符串,但我不确定执行顺序。也许我错过了什么 //content_script.js function getSize(){ chrome.extension.sendMessage({method: "getSize"}, function(response){ size = response.sizeIs; }); alert(size); return size; } 及 警报信息包括

我试图从localStorage中检索一个正在工作的字符串,但我不确定执行顺序。也许我错过了什么

//content_script.js

function getSize(){
    chrome.extension.sendMessage({method: "getSize"}, function(response){
        size = response.sizeIs; 
    });
    alert(size);
    return size;
}

警报信息包括:

undefined
Large
分别


所以我想我的问题是,为什么变量在sendMessage函数内部工作,而不是在外部工作?

这是因为在您的示例中
警报(大小)
size=response.sizeIs之前执行

应该是这样的:

function getSize(callback){
  chrome.extension.sendMessage({method: "getSize"}, function(response){
    size = response.sizeIs; 
    callback(size);
  });
}
这样说吧:

getSize(function(size) {
  alert(size);
});
而不是:

size = getSize();
alert(size);
chrome.extension.sendMessage
是一种异步(非阻塞)方法,这意味着您无法立即获得结果。您必须传递回调函数并在内部处理结果

这就像
setTimeout
函数一样。尝试执行以下代码:

setTimeout(function() {
  console.log('test 1');
}, 100);
console.log('test 2');
您将进入控制台:

test 2
test 1
在这种情况下,
测试2
立即显示,而
测试1
在100ms后显示。异步函数/方法就是这样工作的

您可以阅读有关异步函数的更多信息

test 2
test 1