• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1var defer = require('./defer.js');
2
3// API
4module.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 */
13function 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}
35