我正在构建Chrome扩展程序,并希望从本地存储中获取一些数据。
function Extension() {
function getUser(callback) {
chrome.storage.sync.get('user', function(user){
callback(user);
});
}
this.getUser = getUser;
});
var extension = new Extension;
允许我在其他地方执行以下操作:
extension.getUser(function(user){
console.log(user);
});
=> The user object I'm hoping for! Hooray!
但我宁愿做一些像:
var userData = extension.getUser();
并收到用户对象作为回报。
我尝试将this.getUser = getUser
更改为
this.getUser = getUser(function(user){
return user;
});
但那不起作用。
console.log(extension.getUser);
=> undefined
我不相信这是这个答案的重复,因为我正在解决将回调函数传递给异步请求的建议。 (How do I return the response from an asynchronous call?)
如果我将代码修改为
,则进一步扩展 this.getUser = getUser(function(user){
console.log(user);
});
它会将用户对象记录到控制台!很近!我似乎通过将回调传递给函数来成功检索对象。但我的问题是如何在我的代码中以简洁的方式做到这一点?
=====编辑=====
如果我将userData对象保存为Extension函数的属性,如下所示:
var that = this;
this.getUser = getUser(function(user){
that.userData = user;
});
然后我可以在我的代码中的其他位置进行以下干净调用,并且它正在工作。
var user = extension.userData;
这是否有缺点,或者是否有更简洁的方法将userData
分配给扩展而没有这个/那个方法?