Skip to content

Commit

Permalink
use NewPromiseCapability logic in Promise#finally
Browse files Browse the repository at this point in the history
  • Loading branch information
zloirock committed Jul 18, 2017
1 parent ed59a9c commit 86ed553
Show file tree
Hide file tree
Showing 15 changed files with 1,106 additions and 1,053 deletions.
719 changes: 366 additions & 353 deletions client/core.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions client/core.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion client/core.min.js.map

Large diffs are not rendered by default.

703 changes: 358 additions & 345 deletions client/library.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions client/library.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion client/library.min.js.map

Large diffs are not rendered by default.

675 changes: 344 additions & 331 deletions client/shim.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions client/shim.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion client/shim.min.js.map

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions library/modules/_promise-resolve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
var newPromiseCapability = require('./_new-promise-capability');

module.exports = function (C, x) {
var promiseCapability = newPromiseCapability.f(C);
var resolve = promiseCapability.resolve;
resolve(x);
return promiseCapability.promise;
};
6 changes: 2 additions & 4 deletions library/modules/es6.promise.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ var task = require('./_task').set;
var microtask = require('./_microtask')();
var newPromiseCapabilityModule = require('./_new-promise-capability');
var perform = require('./_perform');
var promiseResolve = require('./_promise-resolve');
var PROMISE = 'Promise';
var TypeError = global.TypeError;
var process = global.process;
Expand Down Expand Up @@ -238,10 +239,7 @@ $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
resolve: function resolve(x) {
// instanceof instead of internal slot check because we should fix it without replacement native Promise core
if (x instanceof $Promise && sameConstructor(x.constructor, this)) return x;
var capability = newPromiseCapability(this);
var $$resolve = capability.resolve;
$$resolve(x);
return capability.promise;
return promiseResolve(this, x);
}
});
$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {
Expand Down
5 changes: 3 additions & 2 deletions library/modules/es7.promise.finally.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@ var $export = require('./_export');
var core = require('./_core');
var global = require('./_global');
var speciesConstructor = require('./_species-constructor');
var promiseResolve = require('./_promise-resolve');

$export($export.P, 'Promise', { 'finally': function (onFinally) {
var C = speciesConstructor(this, core.Promise || global.Promise);
var isFunction = typeof onFinally == 'function';
return this.then(
isFunction ? function (x) {
return new C(function (resolve) { resolve(onFinally()); }).then(function () { return x; });
return promiseResolve(C, onFinally()).then(function () { return x; });
} : onFinally,
isFunction ? function (e) {
return new C(function (resolve) { resolve(onFinally()); }).then(function () { throw e; });
return promiseResolve(C, onFinally()).then(function () { throw e; });
} : onFinally
);
} });
8 changes: 8 additions & 0 deletions modules/_promise-resolve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
var newPromiseCapability = require('./_new-promise-capability');

module.exports = function (C, x) {
var promiseCapability = newPromiseCapability.f(C);
var resolve = promiseCapability.resolve;
resolve(x);
return promiseCapability.promise;
};
6 changes: 2 additions & 4 deletions modules/es6.promise.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ var task = require('./_task').set;
var microtask = require('./_microtask')();
var newPromiseCapabilityModule = require('./_new-promise-capability');
var perform = require('./_perform');
var promiseResolve = require('./_promise-resolve');
var PROMISE = 'Promise';
var TypeError = global.TypeError;
var process = global.process;
Expand Down Expand Up @@ -238,10 +239,7 @@ $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
resolve: function resolve(x) {
// instanceof instead of internal slot check because we should fix it without replacement native Promise core
if (x instanceof $Promise && sameConstructor(x.constructor, this)) return x;
var capability = newPromiseCapability(this);
var $$resolve = capability.resolve;
$$resolve(x);
return capability.promise;
return promiseResolve(this, x);
}
});
$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {
Expand Down
5 changes: 3 additions & 2 deletions modules/es7.promise.finally.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@ var $export = require('./_export');
var core = require('./_core');
var global = require('./_global');
var speciesConstructor = require('./_species-constructor');
var promiseResolve = require('./_promise-resolve');

$export($export.P, 'Promise', { 'finally': function (onFinally) {
var C = speciesConstructor(this, core.Promise || global.Promise);
var isFunction = typeof onFinally == 'function';
return this.then(
isFunction ? function (x) {
return new C(function (resolve) { resolve(onFinally()); }).then(function () { return x; });
return promiseResolve(C, onFinally()).then(function () { return x; });
} : onFinally,
isFunction ? function (e) {
return new C(function (resolve) { resolve(onFinally()); }).then(function () { throw e; });
return promiseResolve(C, onFinally()).then(function () { throw e; });
} : onFinally
);
} });

0 comments on commit 86ed553

Please sign in to comment.