zl程序教程

您现在的位置是:首页 >  后端

当前栏目

[Ramda] Convert a Promise.all Result to an Object with Ramda's zip and zipObj

zip to and &# with 39 object an
2023-09-14 09:00:52 时间

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' ] }