diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..584d787 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,24 @@ +type Callback = (err: E, value: T) => never; + +interface DeAsync { + (fn: (callback: Callback) => void): () => R; + (fn: (arg1: T1, callback: Callback) => void): (arg1: T1) => R; + (fn: (arg1: T1, arg2: T2, callback: Callback) => void): (arg1: T1, arg2: T2) => R; + (fn: (arg1: T1, arg2: T2, arg3: T3, callback: Callback) => void): (arg1: T1, arg2: T2, arg3: T3) => R; + (fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: Callback) => void): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R; + (fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: Callback) => void): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => R; + (fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: Callback) => void): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => R; + (fn: Function): Function + + sleep(timeout: number): void; + + runLoopOnce(): void; + + loopWhile(pred: () => boolean): void; + + await(promise: Promise): T; +} + +declare const instance: DeAsync; + +export = instance; diff --git a/index.js b/index.js index 28acb68..e4c084c 100644 --- a/index.js +++ b/index.js @@ -73,4 +73,19 @@ } }; + module.exports.await = function (promise) { + if (promise === null) { return; } + if (typeof promise.then !== "function") { return; } + var resolved = false, rejected = false, + result, error; + promise.then( + function (value) { resolved = true; result = value; return result; }, + function (reason) { rejected = true; error = reason; return reason; } + ) + module.exports.loopWhile(function () { return !resolved && !rejected; }) + if (rejected) { + throw error; + } + return result; + } }()); diff --git a/package.json b/package.json index 93326db..6543df4 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.1.13", "description": "Turns async function into sync via JavaScript wrapper of Node event loop", "main": "index.js", + "types": "index.d.ts", "author": "Vladimir Kurchatkin ", "contributors": [ "Fred Wen (https://github.com/abbr)"