从localStorage检索数据

时间:2014-01-17 15:19:10

标签: 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;
}

//background.js

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.method == "getSize")
        sendResponse({sizeIs: localStorage['size']});
});

警告信息为:

undefined
Large

分别。

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

1 个答案:

答案 0 :(得分:1)

这是因为在您的示例中alert(size);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

test 2表示立即显示test 1 - 100ms后。这是异步函数/方法的工作方式

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