Socket
Book a DemoInstallSign in
Socket

@asilvas/promise-flatten

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@asilvas/promise-flatten

TC39 Proposal for `Promise.prototype.flatten` function

0.1.0
latest
Source
npmnpm
Version published
Weekly downloads
0
-100%
Maintainers
1
Weekly downloads
 
Created
Source

Promise.prototype.flatten function

  • Spec in progress

Champions

  • Work in progress

Status

This proposal is stage 0 in the TC39 Process.

Inspired By

https://twitter.com/DavidWells/status/1119729914876284928

Examples

While try -> catch works well, it introduces a lot of noise into software that can be avoided.

Consider:

async function test(promise1, promise2, promise3) {
  let val1, val2, val3;

  try {
    val1 = await promise1;
  } catch (ex) {
    // ignore exceptions
  }

  try {
    [val2, val3] = await Promise.all([promise2, promise3]);
  } catch (ex) {
    throw ex; // throw to caller
  }

  return val1 + val2 + val3;
}

Above contains a fair amount of boilerplate for a relatively simple logic flow. Now let's look at an alternative using flatten:

async function test(promise1, promise2, promise3) {
  const [, val1] = await promise1.flatten(); // ignore exceptions
  const [err, [val2, val3] = []] = await Promise.all([promise2, promise3]).flatten();

  if (err) throw err; // throw to caller

  return val1 + val2 + val3;
}

Under the covers both examples accomplish the same, but flatten can reduce code footprint and increase readability.

Polyfill

function flatten() {
  return this.then(ret => [undefined, ret]).catch(err => [err, undefined]);
}

Doesn't get much simpler than this. Tests included.

Discussion

https://twitter.com/Aaron_Silvas/status/1120721934730137601

Keywords

ecmascript

FAQs

Package last updated on 08 Jan 2020

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

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.