In this lesson, we'll use Promise.all
to get an array that contains the resolved values from multiple promises. Then we'll see how we can use Ramda to convert that array of values into a single object using zip
with fromPairs
. Then we'll refactor to use zipObj
.
const R = require('ramda'); const {fromPairs, zip, zipObj} = R; const getName = () => Promise.resolve('wan'); const getHobbies = () => new Promise((res, rej) => { "use strict"; setTimeout(() => res(['basketball', 'skiing'])); }); Promise.all([getName(), getHobbies()]) // .then(console.log); // [ 'wan', [ 'basketball', 'skiing' ] ] // Make it as object style Promise.all([getName(), getHobbies()]) .then(([name, hobbies]) => ({name, hobbies})) // .then(console.log); // { name: 'wan', hobbies: [ 'basketball', 'skiing' ] } // Using zip & fromPairs Promise.all([getName(), getHobbies()]) .then(zip(['name', 'hobbies'])) // [ [ 'name', 'wan' ], [ 'hobbies', [ 'basketball', 'skiing' ] ] ] .then(fromPairs) // { name: 'wan', hobbies: [ 'basketball', 'skiing' ] } // .then(console.log); // zipOjb == zip + fromPairs Promise.all([getName(), getHobbies()]) .then(zipObj(['name', 'hobbies'])) .then(console.log) // { name: 'wan', hobbies: [ 'basketball', 'skiing' ] }