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}`)
    }


    })()