Я пытаюсь концептуально понять, как генераторы ES6 могут упростить асинхронный код. Вот надуманный пример:
- У меня есть функция getGitHubUser, которая принимает имя пользователя и возвращает обещание, которое в конечном итоге разрешается в информацию о пользователе github.
- У меня есть массив имен пользователей.
- Я хотел бы вызвать getGitHubUser с первым именем пользователя, и когда это обещание разрешится, я хочу вызвать getGitHubUser со следующим именем пользователя и продолжать это, пока я не переберу все имена пользователей.
У меня есть работающая реализация, но мне больше интересно, как я могу использовать генераторы, чтобы сделать это лучше.
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
});
.then
. - person Felix Kling   schedule 02.11.2015var p = Promise.resolve(); data.forEach(d => (p = p.then(result => someAsyncCall(d, result))));
. Вы просто продолжаете вызыватьp = p.then(...)
в цикле. Это привязывает новое обещание к предыдущему обещанию. - person Felix Kling   schedule 02.11.2015