oknow.js
function() {
			try {
				if (fn) {
					/**
					 * Insert a done() or ok() argument to other needed arguments
					 */
					syntheticArgs.unshift(function() {
						/**
						 * Call the next in queue
						 */
						$this.next.apply($this, arguments);
					});
					/**
					 * Call the function finally
					 */
					fn.apply(this, syntheticArgs);
				} else {
					syntheticArgs = syntheticArgs || [];
					/**
					 * If no function passed, call the next in queue
					 */
					$this.next.apply(this, syntheticArgs);
				}
			} catch(e) {
				/**
				 * An error caught is thrown directly to the catch handler, if any
				 */
				if (this.onCatch) {
					this.onCatch(e);
				} else {
					throw e;
				}
			}
		}
function() {
			try {
				if (fn) {
					/**
					 * Insert a done() or ok() argument to other needed arguments
					 */
					syntheticArgs.unshift(function() {
						/**
						 * Call the next in queue
						 */
						$this.next.apply($this, arguments);
					});
					/**
					 * Call the function finally
					 */
					fn.apply(this, syntheticArgs);
				} else {
					syntheticArgs = syntheticArgs || [];
					/**
					 * If no function passed, call the next in queue
					 */
					$this.next.apply(this, syntheticArgs);
				}
			} catch(e) {
				/**
				 * An error caught is thrown directly to the catch handler, if any
				 */
				if (this.onCatch) {
					this.onCatch(e);
				} else {
					throw e;
				}
			}
		}
function ( ) { try { if ( fn ) { /**
					 * Insert a done() or ok() argument to other needed arguments
					 */ syntheticArgs . unshift ( function ( ) { /**
						 * Call the next in queue
						 */ $this . next . apply ( $this , arguments ) ; } ) ; /**
					 * Call the function finally
					 */ fn . apply ( this , syntheticArgs ) ; } else { syntheticArgs = syntheticArgs || [ ] ; /**
					 * If no function passed, call the next in queue
					 */ $this . next . apply ( this , syntheticArgs ) ; } } catch ( e ) { /**
				 * An error caught is thrown directly to the catch handler, if any
				 */ if ( this . onCatch ) { this . onCatch ( e ) ; } else { throw e ; } } }
Ensure to have it in the next event loop for better async
Ensure to have it in the next event loop for better async