| 'use strict'; |
| var $ = require('../internals/export'); |
| var IS_PURE = require('../internals/is-pure'); |
| var NativePromise = require('../internals/native-promise-constructor'); |
| var getBuiltIn = require('../internals/get-built-in'); |
| var speciesConstructor = require('../internals/species-constructor'); |
| var promiseResolve = require('../internals/promise-resolve'); |
| var redefine = require('../internals/redefine'); |
| |
| // `Promise.prototype.finally` method |
| // https://tc39.github.io/ecma262/#sec-promise.prototype.finally |
| $({ target: 'Promise', proto: true, real: true }, { |
| 'finally': function (onFinally) { |
| var C = speciesConstructor(this, getBuiltIn('Promise')); |
| var isFunction = typeof onFinally == 'function'; |
| return this.then( |
| isFunction ? function (x) { |
| return promiseResolve(C, onFinally()).then(function () { return x; }); |
| } : onFinally, |
| isFunction ? function (e) { |
| return promiseResolve(C, onFinally()).then(function () { throw e; }); |
| } : onFinally |
| ); |
| } |
| }); |
| |
| // patch native Promise.prototype for native async functions |
| if (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) { |
| redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']); |
| } |