var defer = require('./defer.js');

// API module.exports = async;

/**

* Runs provided callback asynchronously
* even if callback itself is not
*
* @param   {function} callback - callback to invoke
* @returns {function} - augmented callback
*/

function async(callback) {

var isAsync = false;

// check if async happened
defer(function() { isAsync = true; });

return function async_callback(err, result)
{
  if (isAsync)
  {
    callback(err, result);
  }
  else
  {
    defer(function nextTick_callback()
    {
      callback(err, result);
    });
  }
};

}