You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 7-8.RSVP
Socket
Socket
Sign inDemoInstall

promise-wtf

Package Overview
Dependencies
0
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

promise-wtf

Lightweight Promise implementation with the 'finally' method


Version published
Maintainers
1
Created

Readme

Source

promise-wtf

Lightweight Promise implementation with the "finally" method

NPM Build Status codecov Dependency Status NSP Status

Why

Native Promise in ECMAScript 2015 came without "finally" while this method is really useful in many cases.

For an instance, let's start with the following script:

var Article = require('../models/Article');

export var home = (req, res) => {

  let query = req.query || {};
  let skip = query.skip || 0;
  let limit = query.limit || 10;

  let data = {
    error: 0,
    entries: []
  };

I don't think that's good to write something like this:

  return Article.list(skip, limit).then((result) => {
    data.entries = result;
    res.render('landing', data);
  }).catch((err) => {
    data.error = err;
    res.render('landing', data);
  });
};

However, it's better to have "finally" there:

  return Article.list(skip, limit).then((result) => {
    data.entries = result;
  }).catch((err) => {
    data.error = err;
  }).finally(() => {
    res.render('landing', data);
  });
};

Unfortunately, "finally" is only available in some libraries such as Bluebird, or Q+, those are quite heavy to load for client side usage. What I need is just a basic prototype, a simple polyfill with "finally" implemented.

What's different?

This variant inherits the native Promise object's prototype if any. Otherwise, it provides Promise constructor and 3 static methods:

In addition, there is also Promise.series method that works as same as async.series but follows Promise style, for example:

var Promise = require('promise-wtf');

Promise.series([
  (next) => {
    setTimeout(next, 300);
  },
  (next) => {
    setTimeout(next, 100);
  },
  (next) => {
    setTimeout(next, 500);
  },
  (next) => {
    setTimeout(next, 2000);
  },
  (next) => {
    setTimeout(next, 1000);
  }
]).then(() => {
  console.log('Promise.series: then');
}).catch((err) => {
  console.log('Promise.series: catch');
  console.log(err);
}).finally(() => {
  console.log('Promise.series: finally');
});

How

Test

git clone https://github.com/ndaidong/promise-wtf.git
cd promise-wtf
npm install
npm test

// run Promises/A+ Compliance Test Suite
npm run aplus

License

The MIT License (MIT)

Keywords

FAQs

Package last updated on 23 Jun 2017

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

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc