Wondering what’s next for npm?Check out our public roadmap! »

    promise-results

    0.6.2 • Public • Published

    promise-results

    Promise all results of a collection of promises whether they are resolved OR rejected.

    npm package build status dependency status

    Often we want to accomplish several asyncrounous tasks at once. Usually, Promise.all does what we want, but it has a couple limitations:

    1. Rejections only provide rejection reason. Sometimes you want the data from Promises that did resolve, or you want to know specifically which items failed and which succeeded.
    2. Requires a numerically indexed array. It's often more conveniant to label our parralel jobs with object keys than a flat index. promise-results will handle keyed objects or arrays.

    Example

    var resultsOf = require('promise-results');
    var pack = {};
    pack.a = Promise.resolve(2);
    pack.b = a.then(function (r) {
      return new Promise(funciton (resolve, reject) {
        setTimeout(function() {
          resolve(+ 1);
        }, 10);
      })
    });
    pack.c = 42
    pack.d = new Promise(function (resolve, reject) {
        setTimeout(function() {
          reject(new Error('Some random failure'));
        }, 10);
    });
     
    resultsOf(pack).then(function (results) {
      assert(results.a === 2);
      assert(results.b === 3);
      assert(results.c === 42);
      assert(results.d instanceof Error);
    });

    allKeys

    If you just want to use objects, but want to keep Promise.all single rejection pattern, you can use the allKeys function instead.

    Example

    var allKeys = require('promise-results/allKeys');
    var pack = {};
    pack.a = Promise.resolve(2);
    pack.b = a.then(function (r) {
      return new Promise(funciton (resolve, reject) {
        setTimeout(function() {
          resolve(+ 1);
        }, 10);
      })
    });
    pack.c = 42
    pack.d = new Promise(function (resolve, reject) {
        setTimeout(function() {
          reject(new Error('Some random failure'));
        }, 10);
    });
     
    allKeys(pack).catch(function (err) {
      assert(err instanceof Error);
    });

    resultSet

    If you like having a defined reject route, but still want access to your partial results and rejections. You can use resultSet.

    Example

    var results = require('promise-results/resultSet');
    var pack = {};
    pack.a = Promise.resolve(2);
    pack.b = a.then(function (r) {
      return new Promise(funciton (resolve, reject) {
        setTimeout(function() {
          resolve(+ 1);
        }, 10);
      })
    });
    pack.c = 42
    pack.d = new Promise(function (resolve, reject) {
      setTimeout(function() {
        reject(new Error('Some random failure'));
      }, 10);
    });
     
    results(pack).catch(function (result) {
      assert(result.d instanceof Error);
    });

    Install

    npm i promise-results

    DownloadsWeekly Downloads

    193

    Version

    0.6.2

    License

    MIT

    Last publish

    Collaborators

    • avatar