async.js
 1  var defer = require('./defer.js');
 2  
 3  // API
 4  module.exports = async;
 5  
 6  /**
 7   * Runs provided callback asynchronously
 8   * even if callback itself is not
 9   *
10   * @param   {function} callback - callback to invoke
11   * @returns {function} - augmented callback
12   */
13  function async(callback)
14  {
15    var isAsync = false;
16  
17    // check if async happened
18    defer(function() { isAsync = true; });
19  
20    return function async_callback(err, result)
21    {
22      if (isAsync)
23      {
24        callback(err, result);
25      }
26      else
27      {
28        defer(function nextTick_callback()
29        {
30          callback(err, result);
31        });
32      }
33    };
34  }