我正在尝试从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函数内部起作用,而不在外部起作用?
这是因为在您的示例中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之后。这就是异步函数/方法的工作方式
在这里您可以阅读有关异步功能的更多信息
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句