summaryrefslogtreecommitdiff
path: root/lib/ensureAsync.js
blob: 4f4f76262aea0e1f8f14fca4cbe9f1a902fb1a54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
'use strict';

import rest from 'lodash/rest';

import setImmediate from './internal/setImmediate';

export default function ensureAsync(fn) {
    return rest(function (args) {
        var callback = args.pop();
        var sync = true;
        args.push(function () {
            var innerArgs = arguments;
            if (sync) {
                setImmediate(function () {
                    callback.apply(null, innerArgs);
                });
            } else {
                callback.apply(null, innerArgs);
            }
        });
        fn.apply(this, args);
        sync = false;
    });
}