vue-reactive-stateful-promise

Extends promises with their state, a timeout and make them cancellable, all of that vue reactive

Usage no npm install needed!

<script type="module">
  import vueReactiveStatefulPromise from 'https://cdn.skypack.dev/vue-reactive-stateful-promise';
</script>

README

vue-reactive-stateful-promise

Build coverage npm version dependencies

Native Promise wrapper with reactive state getters (isPending, isResolved, isRejected).

Installation

npm install vue-reactive-stateful-promise

Usage

import StatefulPromise from 'vue-reactive-stateful-promise';

Constructor

Create a new promise the same way as you would with the Promise constructor:


  let p = new StatefulPromise((res, rej) => {
    // ...
  });

  p.isPending; // true
  p.isResolved; // false
  p.isRejected; // false

Pass in an async function:


  let p = new StatefulPromise(async () => {
    // ...
  });

  p.isPending; // true
  p.isResolved; // false
  p.isRejected; // false

Extend an existing promise:

  let pr = new Promise((resolve, reject) => {
    setTimeout(resolve, 10);
  });

  let p = new StatefulPromise(pr);

  p.isPending; // true
  p.isResolved; // false
  p.isRejected; // false

Also works with Promise static methods:

  let p = StatefulPromise.resolve('foo');

  p.isPending; // false
  p.isResolved; // true
  p.isRejected; // false

Options

The constructor also accept options

  let p = new StatefulPromise((res, rej) => {
    setTimeout(res, 2000);
  }, {timeout: 1000, ignoreAbort: true});
  
  p.abort(); // This will do nothing
  
  p.catch((e) => {
    console.error(e); // Will return Error: Promise timed out
  });

License

This software is released under the terms of the GPL 3.0 license. See LICENSE.