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