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)
当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)