npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

promisechain

v0.0.1

Published

Chainable promise

Downloads

1

Readme

Promisechain Build Status npm version

Sauce Test Status

Chain-able promise with functional programming style.

Promise provides chain mechanism with then function. But its writing is a little annoying. This library enable more lazy way.

var p = Promise(function(resolve, reject){
  setTimeout(function(){
    resolve([1,2,3,4,5]);
  }, 10);
})

Promisechain.chainable(p)
.map(function(v){
  return v*2;
})
.reduce(function(acc, v) {
  return acc + v;
}, 0)
.filter(function(v) {
  return v > 20;
})
.recovery(99)
.pipe(function(v) {
  return {result :v};
})
.then(function(v){
  console.log(v);
});
// => {result:30}

Usage

In Browser

Use bower.

bower isntall promisechain
<script src="./bower_components/promisechain/dist/promisechain_bundle.js"></script>

Promisechain will be installed to global.

Or use require style with browserify.

In Node.js

Use npm.

npm isntall promisechain
var chainable = require("promisechain").chainable;

API

Promisechain.chainable(p Promise)

Add chain-able methods to p. All chain-able methods return chain-able promise.

Basic Chain-able methods

  • filter(predicate Function)

    Filter value with provided predicate. If predicate is not function, === operator will be used as predicate.

    chainable(p)
    .filter(function(v) {
      return v > 20;
    });
    .then(
      function(v){console.log("This block will be called when v > 20");},
      function(){console.log("This block will be called when v <= 20");}
    );
    chainable(p)
    .filter("HELLO");
    .then(
      function(v){console.log("This block will be called when v === 'HELLO'");},
      function(){console.log("This block will be called when v !== 'HELLO'");}
    );

    Notice Unlike underscore's' or lodash's filter, this filter method does not iterate value. Just apply predicator to value itself. If you want filter element of array, use pipe instead.

    chainable(Promise.resolve([1,2,3,4,5]))
    .pipe(function(arr){
      return _.filter(arr, function(v){return v > 2;});
    })
    .then(function(){
      console.log(v); // => [3,4,5]
    });
    
  • pipe(func Function)

    Pipe values to next step.

    function double(v){ return v*2;}
    
    chainable(Promise.resolve(2))
    .pipe(double);
    .pipe(double);
    .then(
      function(v){console.log(v);} // => 8
    );
  • recovery(value Any)

    Recovery promise chain when before steps are rejected.

    chainable(Promise.resolve(2))
    .filter(function(){return v > 10;});
    .recovery(100);
    .then(
      function(v){console.log(v);}  // => 100,
      function(){console.log("This block will never be called");}
    );

Collection Chain-able methods

These methods are alias to underscore's basic collection utility. Apply underscore's method with arguments, then return chain-able promise. What it is not listed here, You can use with pipe method.

Noteice If invalid parameter is passed to underscore's method, Unless it throw Error, promise will not be rejected. Generally it will return empty array []. So promise chain will not be rejected but resolved with [];

  • map

    An alias of underscore's' map.

    function double(v){ return v*2;}
    
    chainable(Promise.resolve([1,2,3,4,5]))
    .map(double);
    .then(
      function(v){console.log(v);}  // => [2,4,6,8,10],
    );
  • reduce

    An alias of underscore's' reduce.

    function sum(acc, v){ return v + acc;}
    
    chainable(Promise.resolve([1,2,3,4,5]))
    .reduce(sum, 0)
    .then(
      function(v){console.log(v);}  // => 15,
    );
  • first, head and take

    An alias of underscore's' first.

    chainable(Promise.resolve([1,2,3,4,5]))
    .first()
    .then(
      function(v){console.log(v);}  // => 1,
    );
  • initial

    An alias of underscore's' initial.

    chainable(Promise.resolve([1,2,3,4,5]))
    .initial()
    .then(
      function(v){console.log(v);}  // => [1,2,3,4],
    );
  • last

    An alias of underscore's' last.

    chainable(Promise.resolve([1,2,3,4,5]))
    .last()
    .then(
      function(v){console.log(v);}  // => 5,
    );
  • rest, tail, drop

    An alias of underscore's' rest.

    chainable(Promise.resolve([1,2,3,4,5]))
    .rest()
    .then(
      function(v){console.log(v);}  // => [2,3,4,5]
    );
  • keys

    An alias of underscore's' keys.

    chainable(Promise.resolve({
      "key1": "val1",
      "key2": "val2"
    }))
    .keys()
    .then(
      function(v){console.log(v);}  // => ["key1", "key2"]
    );
  • values

    An alias of underscore's' values.

    chainable(Promise.resolve({
      "key1": "val1",
      "key2": "val2"
    }))
    .values()
    .then(
      function(v){console.log(v);}  // => ["val1", "val2"]
    );
  • values

    An alias of underscore's' values.

    chainable(Promise.resolve({
      "key1": "val1",
      "key2": "val2"
    }))
    .pairs()
    .then(
      function(v){console.log(v);}  // => [["key1","val1"], ["key2","val2"]
    );

Development

Install Node.js and NPM.

git clone git://github.com/georegeosddev/promisechain.git
cd promisechain
npm install
npm run-script build

Licence

MIT