Skip to content

Latest commit

 

History

History
71 lines (53 loc) · 1.91 KB

README.md

File metadata and controls

71 lines (53 loc) · 1.91 KB

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);