tiny-future
Version:
A tiny way to make `Promise` more convenient to use without any dependencies.
1 lines • 1.67 kB
Source Map (JSON)
{"version":3,"file":"types.d.ts","sources":["../src/future.ts"],"sourcesContent":["/**\n * A tiny way to make `Promise` more convenient to use without any dependencies.\n *\n * Create a new Future which wraps a new `Promise`.\n *\n * @example\n * ```ts\n * const future = new Future<number>();\n * asyncFunc(() => {\n * future.resolve(0);\n * });\n * return future.promise;\n * ```\n */\nexport class Future<T> {\n /**\n * Resolve the created Promise.\n */\n readonly resolve!: Parameters<ConstructorParameters<typeof Promise<T>>[0]>[0];\n\n /**\n * Reject the created Promise.\n */\n readonly reject!: Parameters<ConstructorParameters<typeof Promise<T>>[0]>[1];\n\n /**\n * The Promise created by the Future.\n */\n readonly promise: Promise<T>;\n\n constructor() {\n // If the environment supports `Promise.withResolvers`, just use it.\n if (typeof Promise.withResolvers === 'function') {\n const { promise, resolve, reject } = Promise.withResolvers<T>();\n this.promise = promise;\n this.resolve = resolve;\n this.reject = reject;\n } else {\n this.promise = new Promise<T>((resolve, reject) => {\n (this as { resolve: typeof resolve }).resolve = resolve;\n (this as { reject: typeof reject }).reject = reject;\n });\n }\n }\n}"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,cAAA,MAAA;AACP;AACA;AACA;AACA,sBAAA,UAAA,CAAA,qBAAA,QAAA,OAAA;AACA;AACA;AACA;AACA,qBAAA,UAAA,CAAA,qBAAA,QAAA,OAAA;AACA;AACA;AACA;AACA,sBAAA,OAAA;AACA;AACA;;;;"}