import {NodeStyleCallback} from '.'; export type NodeStyleAsyncFunction = | ((callback: NodeStyleCallback) => any) | ((arg0: any, callback: NodeStyleCallback) => any) | ((arg0: any, arg1: any, callback: NodeStyleCallback) => any) | ((arg0: any, arg1: any, arg2: any, callback: NodeStyleCallback) => any) | (( arg0: any, arg1: any, arg2: any, arg3: any, callback: NodeStyleCallback, ) => any) | Function; /** * Call a Node.js-style asynchronous function and return a correspondent * promise. */ export function call( fn: NodeStyleAsyncFunction, ...args: any[] ): Promise { return new Promise((resolve, reject) => { fn.call(undefined, ...args, (error: any, value: T) => { if (error) { reject(error); } else { resolve(value); } }); }); } export type AsyncFunction = (...args: any[]) => Promise; /** * Wrap a Node.js-style asynchronous function to a function that returns * promise. */ export function async(fn: NodeStyleAsyncFunction): AsyncFunction { return function(this: any, ...args: any[]): Promise { return new Promise((resolve, reject) => { fn.call(this, ...args, (error: any, value: T) => { if (error) { reject(error); } else { resolve(value); } }); }); }; }