summaryrefslogtreecommitdiff
path: root/lib/ensureAsync.js
blob: 66de26b105a2c662ddaf38e25921960254df6f20 (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 restParam from 'lodash/function/restParam';

import setImmediate from './internal/setImmediate';

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