react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / request / node_modules / har-validator / node_modules / bluebird / js / main / finally.js
81160 views"use strict";1module.exports = function(Promise, NEXT_FILTER, tryConvertToPromise) {2var util = require("./util.js");3var wrapsPrimitiveReceiver = util.wrapsPrimitiveReceiver;4var isPrimitive = util.isPrimitive;5var thrower = util.thrower;67function returnThis() {8return this;9}10function throwThis() {11throw this;12}13function return$(r) {14return function() {15return r;16};17}18function throw$(r) {19return function() {20throw r;21};22}23function promisedFinally(ret, reasonOrValue, isFulfilled) {24var then;25if (wrapsPrimitiveReceiver && isPrimitive(reasonOrValue)) {26then = isFulfilled ? return$(reasonOrValue) : throw$(reasonOrValue);27} else {28then = isFulfilled ? returnThis : throwThis;29}30return ret._then(then, thrower, undefined, reasonOrValue, undefined);31}3233function finallyHandler(reasonOrValue) {34var promise = this.promise;35var handler = this.handler;3637var ret = promise._isBound()38? handler.call(promise._boundTo)39: handler();4041if (ret !== undefined) {42var maybePromise = tryConvertToPromise(ret, promise);43if (maybePromise instanceof Promise) {44maybePromise = maybePromise._target();45return promisedFinally(maybePromise, reasonOrValue,46promise.isFulfilled());47}48}4950if (promise.isRejected()) {51NEXT_FILTER.e = reasonOrValue;52return NEXT_FILTER;53} else {54return reasonOrValue;55}56}5758function tapHandler(value) {59var promise = this.promise;60var handler = this.handler;6162var ret = promise._isBound()63? handler.call(promise._boundTo, value)64: handler(value);6566if (ret !== undefined) {67var maybePromise = tryConvertToPromise(ret, promise);68if (maybePromise instanceof Promise) {69maybePromise = maybePromise._target();70return promisedFinally(maybePromise, value, true);71}72}73return value;74}7576Promise.prototype._passThroughHandler = function (handler, isFinally) {77if (typeof handler !== "function") return this.then();7879var promiseAndHandler = {80promise: this,81handler: handler82};8384return this._then(85isFinally ? finallyHandler : tapHandler,86isFinally ? finallyHandler : undefined, undefined,87promiseAndHandler, undefined);88};8990Promise.prototype.lastly =91Promise.prototype["finally"] = function (handler) {92return this._passThroughHandler(handler, true);93};9495Promise.prototype.tap = function (handler) {96return this._passThroughHandler(handler, false);97};98};99100101