我正在尝试从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函数内部工作,但不在外面?
答案 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您可以阅读有关异步函数的更多信息