A dependable promises and async utility belt

Usage no npm install needed!

<script type="module">
  import promist from '';



Version Build Status Coverage Dependencies Vulnerabilities License Types

A dependable promises and async utility belt.


npm install promist



control(test: Function, generator: Function): Function

Used to control async flow. It returns a promise returning function taking the same arguments as generator.

  • test: a test function (can be async) that will be run before calling each next() on generator, with signature () => Promise<boolean | Error> | boolean | Error. It can return:
    • false: generator will not continue execution (it will never resolve).
    • true: generator will continue execution until the next yield.
    • Error: generator call will return a rejected promise. The same behavior can be expected if the error is thrown instead of returned.
  • generator: must be a generator function. Within it, you'd use yield as you would await for an async function.
import { control } from 'promist';

function* gen(n) {
  // You can use yield as you'd use await
  let res = yield Promise.resolve(n * 2);
  // test() will be called here,
  // if it returns falsy or throws an error this next line won't execute
  res = yield Promise.resolve(res * 5);

  return res;

const willContinue = control(() => true, gen);
const willNotContinue = control(() => false, gen);
const willReject = control(() => Error('An error ocurred'), gen);

willContinue(1).then(console.log); // 10
willNotContinue(2).then(console.log); // Will not resolve
willReject(3).then(console.log).catch(console.error); // Error: An error occurred

isPromise(value: any): boolean

Returns true if value is a thenable and catchable, false otherwise.

  • value: object to test.
import { isPromise } from 'promist';

if (isPromise(promise)) {
  promise.then(() => { /* ... */ }).catch(() => { /* ... */ });

isPromiseLike(value: any): boolean

Returns true if value is a thenable, false otherwise.

  • value: object to test.
import { isPromiseLike } from 'promist';

if (isPromiseLike(promise)) {
  promise.then(() => { /* ... */ });