我试图在概念上理解ES6 Generators如何使异步代码更加简化。这是一个人为的例子:
我有一个有效的实施方案,但我对如何利用生成器来改善这一点感到更好奇。
var getGitHubUser = (user) => {
// using jQuery's $.get
return Promise.resolve($.get("https://api.github.com/users/" + user));
};
var usernames = ["fay-jai", "jyek", "Maestro501", "jaclyntsui"];
getGitHubUser(usernames[0])
.then((result) => {
console.log(result); // fay-jai
return getGitHubUser(usernames[1]);
})
.then((result) => {
console.log(result); // jyek
return getGitHubUser(usernames[2]);
})
.then((result) => {
console.log(result); // Maestro501
return getGitHubUser(usernames[3]);
})
.then((result) => {
console.log(result); // jaclyntsui
});
答案 0 :(得分:1)
这是使用Q执行此操作的方法。另请阅读Harmony generators and promises for Node.js async fun and profit和JavaScript Promises。
var usernames = ["fay-jai", "jyek", "Maestro501", "jaclyntsui"];
Q.spawn(function *(){
var index = 0;
while (index < usernames.length){
console.log(yield Promise.resolve($.get("https://api.github.com/users/" + usernames[index])));
index++;
}
});