You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

combine-promises

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

combine-promises

[![NPM](https://img.shields.io/npm/dm/combine-promises.svg)](https://www.npmjs.com/package/combine-promises) [![CI](https://github.com/slorber/combine-promises/actions/workflows/main.yml/badge.svg)](https://github.com/slorber/combine-promises/actions/work

1.2.0
latest
Source
npmnpm
Version published
Weekly downloads
409K
9.66%
Maintainers
1
Weekly downloads
 
Created
Source

Combine-Promises

NPM CI Size min Size minzip

Like Promise.all([]) but for objects.

import combinePromises from 'combine-promises';

const { user, company } = await combinePromises({
  user: fetchUser(),
  company: fetchCompany(),
});

Why:

  • Insensitive to destructuring order
  • Simpler async functional code

Features:

  • TypeScript support
  • Lightweight
  • Feature complete
  • Well-tested
  • ESM / CJS

Sponsor

ThisWeekInReact.com: the best newsletter to stay up-to-date with the React ecosystem:

ThisWeekInReact.com banner

Install

npm install combine-promises
// OR
yarn add combine-promises

TypeScript support

Good, native and strict TypeScript support:

  • Return type correctly inferred from the input object
  • All object values should be async
  • Only accept objects (reject arrays, null, undefined...)
const result: { user: User; company: Company } = await combinePromises({
  user: fetchUser(),
  company: fetchCompany(),
});

Insensitive to destructuring order

A common error with Promise.all is to have a typo in the destructuring order.

// Bad: destructuring order reversed
const [company, user] = await Promise.all([fetchUser(), fetchCompany()]);

This becomes more dangerous as size of the promises array grows.

With combinePromises, you are using explicit names instead of array indices, which makes the code more robust and not sensitive to destructuring order:

// Good: we don't care about the order anymore
const { company, user } = await combinePromises({
  user: fetchUser(),
  company: fetchCompany(),
});

Simpler async functional code

Suppose you have an object representing a friendship like {user1: "userId-1", user2: "userId-2"}, and you want to transform it to {user1: User, user2: User}.

You can easily do that:

import combinePromises from 'combine-promises';
import { mapValues } from 'lodash'; // can be replaced by vanilla ES if you prefer

const friendsIds = { user1: 'userId-1', user2: 'userId-2' };

const friends = await combinePromises(mapValues(friendsIds, fetchUserById));

Without this library: good luck to keep your code simple.

Inspirations

Name inspired by combineReducers from Redux.

FAQs

Package last updated on 17 Aug 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts