summaryrefslogtreecommitdiff
path: root/build-es/asyncify.js
blob: 9239e9904b010d772a485afb28d4421f5e187ca7 (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
25
26
'use strict';

import isObject from 'lodash-es/isObject';
import rest from 'lodash-es/rest';

export default function asyncify(func) {
    return rest(function (args) {
        var callback = args.pop();
        var result;
        try {
            result = func.apply(this, args);
        } catch (e) {
            return callback(e);
        }
        // if result is Promise object
        if (isObject(result) && typeof result.then === 'function') {
            result.then(function(value) {
                callback(null, value);
            })['catch'](function(err) {
                callback(err.message ? err : new Error(err));
            });
        } else {
            callback(null, result);
        }
    });
}