arozwalak
10/20/2016 - 11:22 PM

Javascript: running two Promises

Javascript: running two Promises

const request = require('request');

const username = 'kzarzycki';
const api_token = 'XZvQs5ZuAR0d7VUEqbO3EcVPfuQ5q6yYLggjus7i';

const url = `https://${username}:${api_token}@api.challonge.com/v1/tournaments/sportradar_warsaw_league_2016`;

const matchesUrl = `matches.json`;
const usersUrl = 'participants.json';

// generic function to get get JSON
const getData = (url, path) => {
    return new Promise((resolve, reject) => {
        request({ uri: `${url}/${path}`, json: true }, (error, response, body) => {
            if (!error && response.statusCode === 200) {
                resolve(body);
            } else {
                reject({ error: error, response: response.body });
            }
        });
    });
};

// filter users by group_player_ids and return array with players display_name
const getUserName = (usersList, groupId) => {
    return usersList.filter(user => user.group_player_ids === groupId).map(user => user.display_name)[0];
};

var getMatches = getData(url, matchesUrl);
var getUsers = getData(url, usersUrl);

Promise.all([getMatches, getUsers]).then(data => {
    let matches = data[0].map(match => match.match);
    let users = data[1].map(user => user.participant);

    let usersDisplayName = users.map(user => ({ display_name: user.display_name, group_player_ids: user.group_player_ids[0]}));
    let matchPlayers = matches.filter(match => match.round === 1).map(match => [match.player1_id, match.player2_id]);
    
    matchPlayers.map(match => {
        let player1 = getUserName(usersDisplayName, match[0]);
        let player2 = getUserName(usersDisplayName, match[1]);

        console.log(`${player1}, ${player2}`);
    });
}).catch(err => console.log(err.response.status, err.response.error));