heyujie
2021-05-20 6ebdefb4a5b2be82a8c452c0bb4624f3d85a17b7
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";
 
var ensurePlainFunction = require("../../../object/ensure-plain-function")
  , isThenable          = require("../../../object/is-thenable")
  , ensureThenable      = require("../../../object/ensure-thenable");
 
var resolveCallback = function (callback, next) {
    var callbackResult = callback();
    if (!isThenable(callbackResult)) return next();
    return callbackResult.then(next);
};
 
module.exports = function (callback) {
    ensureThenable(this);
    ensurePlainFunction(callback);
    return this.then(
        function (result) {
            return resolveCallback(callback, function () { return result; });
        },
        function (error) {
            return resolveCallback(callback, function () { throw error; });
        }
    );
};