JSPM

promise-chain-settled

1.0.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1
  • Score
    100M100P100Q32493F
  • License MIT

Provides a way of knowing when a promise chain is settled. Useful for testing.

Package Exports

  • promise-chain-settled

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (promise-chain-settled) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

npm version

promise-chain-settled

Provides a way of knowing when a promise chain is settled. Useful for testing.

Installation

npm install --save promise-chain-settled

or available on JSDelivr at "https://cdn.jsdelivr.net/npm/promise-chain-settled@1".

API

First you need to wrap the promise with wrap(promise).

This returns an object with the following properties:

numPending(): number

This returns the number of promises in the chain that are currently pending. It can increase at any time if new items are added.

const promise = new Promise(() => {});
const wrapped = wrap(promise);
console.log(wrapped.numPending()); // 1
promise.then(() => {});
console.log(wrapped.numPending()); // 2

isChainSettled(): boolean

Returns true when numPending() === 0 meaning everything in the chain is settled. This can change at any time if new items are added.

const promise = Promise.resolve();
const wrapped = wrap(promise);
console.log(wrapped.isChainSettled()); // false
await promise;
console.log(wrapped.isChainSettled()); // true
promise.then(() => {});
console.log(wrapped.isChainSettled()); // false

whenChainSettled(): Promise

This returns a promise that resolves the next time isChainSettled() goes from false to true.

onChange(listener: () => void): { remove: () => void }

This lets you add a listener that will be invoked whenever numPending() changes.

const promise = Promise.resolve();
const wrapped = wrap(promise);
wrapped.onChange(() => {
  // first call: new numPending() 2
  // second call: new numPending() 1
  // third call: new numPending() 0
  console.log('new numPending()', wrapped.numPending());
});
promise.then(() => {});

Example

import { wrap } from 'promise-chain-settled';

const promise = Promise.resolve();

// modify the promise so that we can keep track of everything in the chain
const wrapped = wrap(promise);

promise
  .then(() => {
    return somethingAsync();
  })
  .then(() => {
    return somethingElseAsync();
  })
  .then((something) => {
    console.log('Done');
  });

wrapped.whenChainSettled().then(() => {
  console.log('Chain settled');
});

would log

Done
Chain settled