Javascript:如何避免传递回调函数来获取异步函数的返回值

时间:2016-12-07 21:30:45

标签: javascript google-chrome-extension

我正在构建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分配给扩展而没有这个/那个方法?

0 个答案:

没有答案