7.4 Refactoring Promises to Async/await
by dimitrs_papadimitriou
HTML
<script src="https://rawgit.com/eu81273/jsfiddle-console/master/console.js"></script>
JavaScript
(async()=>{ // this is just because all awaits should be in async functions
var getUsers = () => fetch("https://api.github.com/users");
var getUserFollowers = (login) => fetch(`https://api.github.com/users/${login}/followers`);
var toJson = response => response.json()
var prop = name => o => o[name];
Promise.prototype.thenT = function (f) {
return this.then(x => x.map(f))
}
// getUsers()
// .then(toJson)
// .then(users => users[0]) //first
// .then(prop(`login`)) //get login
// .then(getUserFollowers)
// .then(toJson)
// .thenT(prop(`login`))
// .then(v => console.log(v))
// .catch(v => console.log("left" + v))
try {
var usersResponse = await getUsers();
var users = await usersResponse.json(); //.json actually returns a promise
var firstUserLogin = users[0].login;
var followersResponse = await getUserFollowers(firstUserLogin);
var followers = await followersResponse.json();
var followersLogins = followers.map(follower => follower.login);
console.log(followersLogins)
} catch (error) {
console.log(`error ${error}`)
}
})()