@akala/core
Version:
54 lines (45 loc) • 1.34 kB
text/typescript
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
}