• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"use strict";
2module.exports =
3function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {
4var util = require("./util");
5var tryCatch = util.tryCatch;
6
7Promise.method = function (fn) {
8    if (typeof fn !== "function") {
9        throw new Promise.TypeError("expecting a function but got " + util.classString(fn));
10    }
11    return function () {
12        var ret = new Promise(INTERNAL);
13        ret._captureStackTrace();
14        ret._pushContext();
15        var value = tryCatch(fn).apply(this, arguments);
16        var promiseCreated = ret._popContext();
17        debug.checkForgottenReturns(
18            value, promiseCreated, "Promise.method", ret);
19        ret._resolveFromSyncValue(value);
20        return ret;
21    };
22};
23
24Promise.attempt = Promise["try"] = function (fn) {
25    if (typeof fn !== "function") {
26        return apiRejection("expecting a function but got " + util.classString(fn));
27    }
28    var ret = new Promise(INTERNAL);
29    ret._captureStackTrace();
30    ret._pushContext();
31    var value;
32    if (arguments.length > 1) {
33        debug.deprecated("calling Promise.try with more than 1 argument");
34        var arg = arguments[1];
35        var ctx = arguments[2];
36        value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)
37                                  : tryCatch(fn).call(ctx, arg);
38    } else {
39        value = tryCatch(fn)();
40    }
41    var promiseCreated = ret._popContext();
42    debug.checkForgottenReturns(
43        value, promiseCreated, "Promise.try", ret);
44    ret._resolveFromSyncValue(value);
45    return ret;
46};
47
48Promise.prototype._resolveFromSyncValue = function (value) {
49    if (value === util.errorObj) {
50        this._rejectCallback(value.e, false);
51    } else {
52        this._resolveCallback(value, true);
53    }
54};
55};
56