Skip to content

A tiny way to make `Promise` more convenient to use without any dependencies.

License

Notifications You must be signed in to change notification settings

JiangJie/tiny-future

Repository files navigation

Future

NPM version NPM downloads JSR Version JSR Score Build Status codecov


Future uses less than 10 lines of code to change the usage of Promise.

Allow Promise to call resolve/reject anywhere, just like C# TaskCompletionSource, without being restricted to the executor that creates Promise.


Installation

# via pnpm
pnpm add tiny-future
# or via yarn
yarn add tiny-future
# or just from npm
npm install --save tiny-future
# via JSR
jsr add @happy-js/tiny-future
# for deno
deno add @happy-js/tiny-future
# for bun
bunx jsr add @happy-js/tiny-future

Example

import { Future } from 'tiny-future';

function sleep(ms: number):Promise<number> {
    const future = new Future<number>();

    setTimeout(() => {
        // future.resolve/future.reject at anywhere
        future.resolve(0);
    }, ms);

    return future.promise;
}

await sleep(1000);

If you have used C# TaskCompletionSource, then you should be familiar with the usage of Future.

Compare to the usual way of creating Promise.

function sleep(ms: number): Promise<number> {
    return new Promise((resolve) => {
        setTimeout(() => {
            // resolve/reject must in the executor closure
            resolve(ms);
        }, ms);
    });
}

await sleep(1000);

About

A tiny way to make `Promise` more convenient to use without any dependencies.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published