9530fc7b936783b8c08f83efc065b4b49b6eba10ec493a5725527d98b889a19ef0e98ae732d3812967d9bd31b3d1f062577b260945d9363c34c5c0ffa4a61d 599 B

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