synctasks
Version:
An explicitly non-A+ Promise library that resolves promises synchronously
85 lines (84 loc) • 6.53 kB
TypeScript
/**
* SyncTasks.ts
* Author: David de Regt
* Copyright: Microsoft 2015
*
* A very simple promise library that resolves all promises synchronously instead of
* kicking them back to the main ticking thread. This affirmatively rejects the A+
* standard for promises, and is used for a combination of performance (wrapping
* things back to the main thread is really slow) and because indexeddb loses
* context for its calls if you send them around the event loop and transactions
* automatically close.
*/
export declare const config: {
exceptionsToConsole: boolean;
catchExceptions: boolean;
traceEnabled: boolean;
exceptionHandler: ((ex: Error) => void) | undefined;
unhandledErrorHandler: (err: any) => void;
};
export interface Es6Thenable<R> {
then<U>(onFulfilled?: (value: R) => U | Es6Thenable<U>, onRejected?: (error: any) => U | Es6Thenable<U>): Es6Thenable<U>;
then<U>(onFulfilled?: (value: R) => U | Es6Thenable<U>, onRejected?: (error: any) => void): Es6Thenable<U>;
}
export declare function fromThenable<T>(thenable: Es6Thenable<T>): STPromise<T>;
/**
* This function will defer callback of the specified callback lambda until the next JS tick, simulating standard A+ promise behavior
*/
export declare function asyncCallback(callback: () => void): void;
export declare type SuccessFunc<T, U> = (value: T) => U | Thenable<U>;
export declare type ErrorFunc<U> = (error: any) => U | Thenable<U>;
export declare type CancelFunc = (context: any) => void;
export interface Deferred<T> {
resolve(obj: T): Deferred<T>;
reject(obj?: any): Deferred<T>;
promise(): STPromise<T>;
onCancel(callback: CancelFunc): Deferred<T>;
}
export interface Thenable<T> {
then<U>(successFunc: SuccessFunc<T, U>, errorFunc?: ErrorFunc<U>): STPromise<U>;
}
export interface Cancelable {
cancel(context?: any): void;
}
export interface STPromise<T> extends Thenable<T>, Cancelable {
catch(errorFunc: ErrorFunc<T>): STPromise<T>;
finally(func: (value: T | any) => void): STPromise<T>;
always<U>(func: (value: T | any) => U | Thenable<U>): STPromise<U>;
done(successFunc: (value: T) => void): STPromise<T>;
fail(errorFunc: (error: any) => void): STPromise<T>;
thenAsync<U>(successFunc: SuccessFunc<T, U>, errorFunc?: ErrorFunc<U>): STPromise<U>;
setTracingEnabled(enabled: boolean): STPromise<T>;
toEs6Promise(): Promise<T>;
}
export { STPromise as Promise };
export declare type Raceable<T> = T | Thenable<T> | undefined | null;
export declare function all<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>, Raceable<T8>, Raceable<T9>, Raceable<T10>]): STPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>;
export declare function all<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>, Raceable<T8>, Raceable<T9>]): STPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>;
export declare function all<T1, T2, T3, T4, T5, T6, T7, T8>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>, Raceable<T8>]): STPromise<[T1, T2, T3, T4, T5, T6, T7, T8]>;
export declare function all<T1, T2, T3, T4, T5, T6, T7>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>]): STPromise<[T1, T2, T3, T4, T5, T6, T7]>;
export declare function all<T1, T2, T3, T4, T5, T6>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>]): STPromise<[T1, T2, T3, T4, T5, T6]>;
export declare function all<T1, T2, T3, T4, T5>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>]): STPromise<[T1, T2, T3, T4, T5]>;
export declare function all<T1, T2, T3, T4>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>]): STPromise<[T1, T2, T3, T4]>;
export declare function all<T1, T2, T3>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>]): STPromise<[T1, T2, T3]>;
export declare function all<T1, T2>(values: [Raceable<T1>, Raceable<T2>]): STPromise<[T1, T2]>;
export declare function all<T>(values: (T | Thenable<T>)[]): STPromise<T[]>;
export declare function Defer<T>(): Deferred<T>;
export declare function Resolved<T extends void>(): STPromise<T>;
export declare function Resolved<T>(val: T): STPromise<T>;
export declare function Rejected<T>(val?: any): STPromise<T>;
export declare function race<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>, Raceable<T8>, Raceable<T9>, Raceable<T10>]): STPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10>;
export declare function race<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>, Raceable<T8>, Raceable<T9>]): STPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9>;
export declare function race<T1, T2, T3, T4, T5, T6, T7, T8>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>, Raceable<T8>]): STPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8>;
export declare function race<T1, T2, T3, T4, T5, T6, T7>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>]): STPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7>;
export declare function race<T1, T2, T3, T4, T5, T6>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>]): STPromise<T1 | T2 | T3 | T4 | T5 | T6>;
export declare function race<T1, T2, T3, T4, T5>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>]): STPromise<T1 | T2 | T3 | T4 | T5>;
export declare function race<T1, T2, T3, T4>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>]): STPromise<T1 | T2 | T3 | T4>;
export declare function race<T1, T2, T3>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>]): STPromise<T1 | T2 | T3>;
export declare function race<T1, T2>(values: [Raceable<T1>, Raceable<T2>]): STPromise<T1 | T2>;
export declare function race<T>(values: (T | Thenable<T>)[]): STPromise<T[]>;
export declare type RaceTimerResponse<T> = {
timedOut: boolean;
result?: T;
};
export declare function raceTimer<T>(promise: STPromise<T>, timeMs: number): STPromise<RaceTimerResponse<T>>;