UNPKG

@akala/core

Version:
54 lines (45 loc) 1.34 kB
import { EventEmitter } from 'events' import { setTimeout, clearTimeout } from 'timers'; import { polyfill } from 'es6-promise' polyfill(); export function Promisify<T>(o: T | PromiseLike<T>): PromiseLike<T> { return Promise.resolve(o); } export type ResolveHandler<T, TResult> = (value: T) => TResult | PromiseLike<TResult> export type RejectHandler<TResult> = (reason: any) => void | TResult | PromiseLike<TResult>; export function isPromiseLike<T>(o: T | PromiseLike<T>): o is PromiseLike<T> { return o && o['then'] && typeof (o['then']) == 'function'; } export function when<T>(promises: PromiseLike<T>[]): PromiseLike<T[]> { return Promise.all(promises); } export function whenOrTimeout<T>(promise: PromiseLike<T>, timeoutInMs: number): PromiseLike<T> { return new Promise<T>((resolve, reject) => { var timedOut = false; var timeOut = setTimeout(function () { timedOut = true; reject('timeout'); }, timeoutInMs); promise.then(function (data) { clearTimeout(timeOut); resolve(data); }, function (rejection) { clearTimeout(timeOut); reject(rejection); }); }) } export enum PromiseStatus { Pending = 0, Resolved = 1, Rejected = 2 }