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
var followersOfUsers =
clientsPromise
.then(clients => clients.map(clientId => mockEmployeeRepository.getById(clientId)))
.then(employees => Promise.all(employees))
.then(employees => employees.map(prop('name')))
.then(v => console.log(v))
.catch(v => console.log("error:" + v))