| 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); |
| }); |
| } |
| }; |
| } |