UNPKG

react-native-web-headroom

Version:
69 lines (52 loc) 1.75 kB
'use strict'; var requirePromise = require('./requirePromise'); requirePromise(); var ES = require('es-abstract/es7'); var bind = require('function-bind'); var promiseResolve = function PromiseResolve(C, value) { return new C(function (resolve) { resolve(value); }); }; var OriginalPromise = Promise; var createThenFinally = function CreateThenFinally(C, onFinally) { return function (value) { var result = onFinally(); var promise = promiseResolve(C, result); var valueThunk = function () { return value; }; return promise.then(valueThunk); }; }; var createCatchFinally = function CreateCatchFinally(C, onFinally) { return function (reason) { var result = onFinally(); var promise = promiseResolve(C, result); var thrower = function () { throw reason; }; return promise.then(thrower); }; }; var then = bind.call(Function.call, OriginalPromise.prototype.then); var promiseFinally = function finally_(onFinally) { /* eslint no-invalid-this: 0 */ var promise = this; then(promise, null, function () {}); // throw if IsPromise(this) is false; catch() to avoid unhandled rejection warnings var C = ES.SpeciesConstructor(promise, OriginalPromise); // may throw var thenFinally = onFinally; var catchFinally = onFinally; if (ES.IsCallable(onFinally)) { thenFinally = createThenFinally(C, onFinally); catchFinally = createCatchFinally(C, onFinally); } return promise.then(thenFinally, catchFinally); }; if (Object.getOwnPropertyDescriptor) { var descriptor = Object.getOwnPropertyDescriptor(promiseFinally, 'name'); if (descriptor && descriptor.configurable) { Object.defineProperty(promiseFinally, 'name', { configurable: true, value: 'finally' }); } } module.exports = promiseFinally;