4.7.2 Promise.all Example

by dimitrs_papadimitriou

HTML

<script src="https://rawgit.com/eu81273/jsfiddle-console/master/console.js"></script>

JavaScript

var mockClientRepository = ({
    get: (predicate) =>
      new Promise((resolve, reject) => {
        setTimeout(() => {

          var client =
            [{ id: 1, name: 'rick', age: 29, employeeId: 1 },
            { id: 2, name: 'morty', age: 25, employeeId: 2 }]
              .filter(predicate);

          if (client)
            resolve(client)
          else
            reject("no client found")

        }, 1000)
      })

  })

  var mockEmployeeRepository = ({
    getById: (id) =>
      new Promise((resolve, reject) => {

        setTimeout(() => {
          var employee = [{ id: 1, name: 'jim', age: 29 },
          { id: 2, name: 'jane', age: 25 }]
            .find(employee => employee.id === id);

          if (employee)
            resolve(employee)
          else
            reject("no employee found")

        }, 1000)
      })
  })


  var prop = name => o => o[name];

  var clientsPromise = mockClientRepository
    .get(client => client.age > 20)                  //clients over 20 
    .then(users => users.slice(0, 3))                //take first 3 
    .then(users => users.map(prop('employeeId')))    //get the employeeIds 

 Promise.prototype.mapT = function (f) {
    return this.then(x => x.map(f))
  }
  
  var followersOfUsers =
    clientsPromise
      .mapT(mockEmployeeRepository.getById)
      .then(employees => Promise.all(employees))
      .mapT(prop('name'))
      .then(v => console.log(v))
      .catch(v => console.log("error:" + v))