angular-promise-extras

Adds some extra functions to $q like $q.allSettled

Usage no npm install needed!

<script type="module">
  import angularPromiseExtras from 'https://cdn.skypack.dev/angular-promise-extras';
</script>

README

angular-promise-extras

build status

Installation

WebPack

  1. Install the package

    npm install --save angular-promise-extras
    
  2. require/import angular-promise-extras.

  3. Add the angular module ngPromiseExtras as a dependency of your application module.

Bower

  1. Install the package

    bower install --save angular-promise-extras
    
  2. Add the bower source file to your web page.

  3. Add the angular module ngPromiseExtras as a dependency of your application module.

Usage

var deferreds = [ $q.defer(), $q.defer() ]
var asyncVals = deferreds.map(function(deferred) {
  return deferred.promise
})
asyncVals.push(3)

$q.allSettled(asyncVals).then(function(values) {
  expect(values).toEqual([
    { state: 'fulfilled', value: 1 },
    { state: 'rejected', reason: 2 },
    { state: 'fulfilled', value: 3 },
  ])
})

deferreds[0].resolve(1)
deferreds[1].reject(2)

Also works with objects:

var deferreds = [ $q.defer(), $q.defer() ]
var promisesArray = deferreds.map(function(deferred) {
  return deferred.promise
})
var promises = { a: promisesArray[0], b: promisesArray[1], c: 3  }

$q.allSettled(promises).then(function(values) {
  expect(values).toEqual({
    a: { state: 'fulfilled', value: 1 },
    b: { state: 'rejected', reason: 2 },
    c: { state: 'fulfilled', value: 3 },
  })
})

deferreds[0].resolve(1)
deferreds[1].reject(2)

Also provides

  • $q.map: works like Bluebird.map or Bluebird.props depending on whether an array or an object is passed.
  • $q.mapSettled: Works like $q.map but with the settled semantics.
  • $q.resolve: Works like Bluebird.resolve.