0.2.0 • Published 1 year ago

controllable-resolve v0.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

controllable-resolve

npm.io npm.io npm license

Example

A simple controllable promise resolve let you can control promise when to resolve

Demo

Installation

npm install controllable-resolve

Usage

createControllableResolve

import { createControllableResolve } from 'controllable-resolve';

const controllableResolve = createControllableResolve();
const { waitResolved, resolve } = controllableResolve;

const startButton = document.getElementById('start');
const resolveButton = document.getElementById('resolve');

startButton.addEventListener('click', () => {
  // wait promise resolved
  waitResolved().then((value) => {
    alert(`do something with value: ${value}`);
  });
});

resolveButton.addEventListener('click', () => {
  // resolve that promise when you need
  resolve(100);
});

Once mode

when you use once mode, that can be use like an event center, once that waitResolved be resolved, the promise will be keep and you can get value from our controllableResolve, also the waitResolved will be fulfilled, so that will pass that Promise directly, .then method will be triggered directly.

import { createControllableResolve } from 'controllable-resolve';

const controllableResolve = createControllableResolve<number>({
  once: true,
});
const { waitResolved, resolve, reset } = controllableResolve;

waitResolved().then((value) => {
  console.log('7', `do something with value: ${value}`);
});

console.log('1', controllableResolve.waiting); // true
resolve(100); // will trigger above console.log

console.log('2', controllableResolve.waiting); // false
// that promise.then will be trigger directly
waitResolved().then((value) => {
  console.log('8', `do something with value: ${value}`);
});

// that resolved value be keep, you can use that synchronously.
console.log('3', controllableResolve.value); // 100
console.log('4', controllableResolve.waiting); // true

// clear keep promise and value
reset();
console.log('5', controllableResolve.value); // undefined
console.log('6', controllableResolve.waiting); // falsee

onWaitingChange

onWaitingChange be call before waiting state change.

import { createControllableResolve } from 'controllable-resolve';

const controllableResolve = createControllableResolve({
  onWaitingChange: (state) => {
    console.log(state);
  },
});
const { waitResolved, resolve, reset, cancel } = controllableResolve;

waitResolved(); // onWaitingChange will be triggered with `true`

resolve(100); // onWaitingChange will be triggered with `false`

waitResolved(); // onWaitingChange will be triggered with `true`

cancel(); // onWaitingChange will be triggered with `false`
reset(); // onWaitingChange can be triggered, that inner waiting still be `false`

waitResolved(); // onWaitingChange will be triggered with `true`

reset(); // onWaitingChange will be triggered with `false`

API

createControllableResolve return instance

fieldtypedescription
waitResolved(state:boolean) => voidcreate a wait resolved promise for you can control when to resolve promise
resolve(value: T): voidwaitResolved promise, this method need be call after waitResolved
cancel(): voidcancel waitResolve when you not need wait anymore, this method need be call after waitResolved
waitingreadonly booleanis there have promise be waiting
reset(): voidwhen you use once mode, use to clear those keep promise and resolve value.
valuereadonly T \| undefinedwhen you use once mode, that value be keep inside the promise result

createControllableResolve options

fielddefaulttypedescription
ignorePreviousfalsebooleanif that be true, when waitResolved will ignore previous one,
oncefalsebooleanonce the waitResolved promise be resolved, that will keep that resolve promise until you call reset method manually.
onWaitingChange-(state:boolean) => voidbe triggered when promise waiting state change

React hook

use-controllable-resolve

Unpkg link