Chrome系统调用等待异步结果

use*_*551 0 javascript asynchronous google-chrome-extension

我正在开发Chrome扩展程序,该扩展程序将从Chrome.System apis收集信息,并立即使用所有数据.问题当然是这些调用是异步的.我没有很多关于JS的经验,所以我想确保我以最简单的方式做到这一点.
我能想到的唯一方法是在回调中创建嵌套函数.

就像是:

chrome.identity.getProfileUserInfo(function(userinfo){
          getLocalIPs(userinfo.email, function(email, ips){
//keep passing data and nesting here.... and then do something after all calls are made
}
}
Run Code Online (Sandbox Code Playgroud)

这似乎很难很快地阅读代码.做这样的事情的推荐方法是什么.使用同步编程,我想要完成这样的事情:

var email = getEmail();
var ip = getIP();
var processor = getProcessor();

dosomething(email, ip, processor);  
Run Code Online (Sandbox Code Playgroud)

Xan*_*Xan 6

当JavaScript本身具有处理它的工具时,为什么要重新发明轮子呢?

具体来说,承诺.HTML5Rock上有一篇非常好的文章介绍了这个概念.

你创造了返回承诺的函数:

function getEmailPromise() {
  return new Promise(function(resolve, reject) {
    chrome.identity.getProfileUserInfo(function(userinfo) {
      resolve(userinfo.email);
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

然后你可以完全按照自己的意愿行事:

var email = getEmailPromise();
var ip = getIPPromise();
var processor = getProcessorPromise();

Promise.all([email, ip, processor]).then(function(data) {
  // data is [email, ip, processor]
});
Run Code Online (Sandbox Code Playgroud)