Comparing version 1.2.1 to 1.2.2
122
index.js
@@ -10,2 +10,4 @@ /** | ||
const callback = Symbol('callback'); | ||
const captureErrors = Symbol('captureErrors'); | ||
const releaseErrors = Symbol('releaseErrors'); | ||
@@ -91,11 +93,72 @@ function awaiter(obj, target, noCache) { | ||
var rootObj = genFunc(); | ||
var errorHandler = []; | ||
function exit(result) { | ||
if(result instanceof Error){ | ||
if(errorHandler.length){ | ||
let last = errorHandler.pop(); | ||
return doRun(last, last.cb, last.throw(result)); | ||
} | ||
} | ||
complete(result, rootObj); | ||
} | ||
return (function doRun(genObj, cb) { | ||
function processYieldResult(yielded, genObj, prev, next) { | ||
if(yielded.done){ | ||
if(errorHandler.length && errorHandler[errorHandler.length - 1] === genObj){ | ||
errorHandler.pop(); | ||
} | ||
if(genObj.cb) { | ||
return genObj.cb(prev); | ||
} | ||
if(genObj === rootObj){ | ||
return exit(prev); | ||
} | ||
return; | ||
} | ||
if(isGeneratorObj(yielded.value)){ | ||
return doRun(yielded.value, next); | ||
} | ||
if(yielded.value instanceof Promise){ | ||
return yielded.value.then( | ||
function (result) { | ||
setTimeout(next, 0, result); | ||
}, | ||
function (err) { | ||
if(!(err instanceof Error)){ | ||
err = new Error(err); | ||
} | ||
setTimeout(next, 0, err); | ||
} | ||
); | ||
} | ||
if(yielded.value === captureErrors){ | ||
if(errorHandler.indexOf(genObj) < 0){ | ||
errorHandler.push(genObj); | ||
} | ||
} else if(yielded.value === releaseErrors){ | ||
if(errorHandler.length && errorHandler[errorHandler.length - 1] === genObj){ | ||
errorHandler.pop(); | ||
} | ||
} | ||
next(yielded.value); | ||
} | ||
function doRun(genObj, cb, prevResult) { | ||
genObj.cb = cb; | ||
function next(prev) { | ||
if(prev instanceof Error){ | ||
return exit(prev); | ||
} | ||
var yielded; | ||
@@ -107,33 +170,13 @@ try{ | ||
} | ||
if(yielded.done){ | ||
if(cb) { | ||
return cb(prev); | ||
} | ||
if(genObj === rootObj){ | ||
return exit(prev); | ||
} | ||
processYieldResult(yielded, genObj, prev, next); | ||
} | ||
if(!prevResult){ | ||
next(); | ||
} else { | ||
processYieldResult(prevResult, genObj, void 0, next); | ||
} | ||
} | ||
return; | ||
} | ||
if(isGeneratorObj(yielded.value)){ | ||
return doRun(yielded.value, next); | ||
} | ||
if(yielded.value instanceof Promise){ | ||
return yielded.value.then( | ||
function (result) { | ||
setTimeout(next, 0, result); | ||
}, | ||
function (err) { | ||
if(!(err instanceof Error)){ | ||
err = new Error(err); | ||
} | ||
setTimeout(next, 0, err); | ||
} | ||
); | ||
} | ||
next(yielded.value); | ||
} | ||
next(); | ||
})(rootObj); | ||
return doRun(rootObj); | ||
} | ||
@@ -231,2 +274,4 @@ | ||
awync.callback = callback; | ||
awync.captureErrors = captureErrors; | ||
awync.releaseErrors = releaseErrors; | ||
awync.SUPPRESS_THROW = 1; | ||
@@ -238,2 +283,3 @@ awync.SUPPRESS_REJECT = 2; | ||
Object.defineProperties(awync, { | ||
@@ -253,4 +299,20 @@ iterator: { | ||
configurable: false | ||
}, | ||
captureErrors: { | ||
value: captureErrors, | ||
__proto__: null, | ||
enumerable: false, | ||
writable: false, | ||
configurable: false | ||
}, | ||
releaseErrors: { | ||
value: releaseErrors, | ||
__proto__: null, | ||
enumerable: false, | ||
writable: false, | ||
configurable: false | ||
} | ||
}); | ||
module.exports = awync; |
{ | ||
"name": "awync", | ||
"version": "1.2.1", | ||
"version": "1.2.2", | ||
"description": "Lightweight async / await library for NodeJs", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
26920
354