首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从localStorage检索数据

问从localStorage检索数据
EN

Stack Overflow用户
提问于 2014-01-17 15:19:09
回答 1查看 86关注 0票数 1

我正在尝试从localStorage中检索一个正在工作的字符串,但我不确定执行的顺序。或者我遗漏了什么。

代码语言:javascript
复制
//content_script.js

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

和

代码语言:javascript
复制
//background.js

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

警报消息如下:

代码语言:javascript
复制
undefined
Large

分别使用。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-17 15:27:06

这是因为在您的示例中,alert(size);在size = response.sizeIs;之前执行

应该是这样的:

代码语言:javascript
复制
function getSize(callback){
  chrome.extension.sendMessage({method: "getSize"}, function(response){
    size = response.sizeIs; 
    callback(size);
  });
}

然后这样称呼它:

代码语言:javascript
复制
getSize(function(size) {
  alert(size);
});

而不是:

代码语言:javascript
复制
size = getSize();
alert(size);

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

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

代码语言:javascript
复制
setTimeout(function() {
  console.log('test 1');
}, 100);
console.log('test 2');

你会进入你的控制台:

代码语言:javascript
复制
test 2
test 1

在这种情况下,test 2立即显示和test 1 -在100毫秒后。这就是异步函数/方法的工作方式。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21189363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档