/* @flow */ export type Defered = { promise: Promise; resolve: (t: T) => void; reject: (e: Error) => void; rejectingPromise: Promise; }; export function create(): Defered { let localResolve: (t: T) => void = (t: T) => {}; let localReject: (e?: ?Error) => void = (e) => {}; const promise = new Promise((resolve, reject) => { localResolve = resolve; localReject = reject; }); const rejectingPromise = promise.then(() => { throw new Error(`Promise is always rejecting`); }); rejectingPromise.catch(() => {}); return { resolve: localResolve, reject: localReject, promise, rejectingPromise, }; } export function resolveTimeoutPromise(delay: number, result: T): Promise { return new Promise((resolve) => { setTimeout(() => { resolve(result); }, delay); }); } export function rejectTimeoutPromise(delay: number, error: Error): Promise { return new Promise((resolve, reject) => { setTimeout(() => { reject(error); }, delay); }); }