Skip to content

Commit

Permalink
lookup PromiseConstructor.resolve only once in Promise combinators
Browse files Browse the repository at this point in the history
  • Loading branch information
zloirock committed May 2, 2019
1 parent c4133cf commit d6f6d0b
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 4 deletions.
6 changes: 4 additions & 2 deletions packages/core-js/modules/es.promise.js
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,7 @@ $export({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {
var resolve = capability.resolve;
var reject = capability.reject;
var result = perform(function () {
var $promiseResolve = aFunction(C.resolve);
var values = [];
var counter = 0;
var remaining = 1;
Expand All @@ -317,7 +318,7 @@ $export({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {
var alreadyCalled = false;
values.push(undefined);
remaining++;
C.resolve(promise).then(function (value) {
$promiseResolve.call(C, promise).then(function (value) {
if (alreadyCalled) return;
alreadyCalled = true;
values[index] = value;
Expand All @@ -336,8 +337,9 @@ $export({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {
var capability = newPromiseCapability(C);
var reject = capability.reject;
var result = perform(function () {
var $promiseResolve = aFunction(C.resolve);
iterate(iterable, function (promise) {
C.resolve(promise).then(capability.resolve, reject);
$promiseResolve.call(C, promise).then(capability.resolve, reject);
});
});
if (result.error) reject(result.value);
Expand Down
4 changes: 3 additions & 1 deletion packages/core-js/modules/esnext.promise.all-settled.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';
// `Promise.allSettled` method
// https://github.com/tc39/proposal-promise-allSettled
var aFunction = require('../internals/a-function');
var newPromiseCapabilityModule = require('../internals/new-promise-capability');
var perform = require('../internals/perform');
var iterate = require('../internals/iterate');
Expand All @@ -12,6 +13,7 @@ require('../internals/export')({ target: 'Promise', stat: true }, {
var resolve = capability.resolve;
var reject = capability.reject;
var result = perform(function () {
var promiseResolve = aFunction(C.resolve);
var values = [];
var counter = 0;
var remaining = 1;
Expand All @@ -20,7 +22,7 @@ require('../internals/export')({ target: 'Promise', stat: true }, {
var alreadyCalled = false;
values.push(undefined);
remaining++;
C.resolve(promise).then(function (value) {
promiseResolve.call(C, promise).then(function (value) {
if (alreadyCalled) return;
alreadyCalled = true;
values[index] = { status: 'fulfilled', value: value };
Expand Down
4 changes: 3 additions & 1 deletion packages/core-js/modules/esnext.promise.any.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';
// `Promise.any` method
// https://github.com/tc39/proposal-promise-any
var aFunction = require('../internals/a-function');
var getBuiltIn = require('../internals/get-built-in');
var newPromiseCapabilityModule = require('../internals/new-promise-capability');
var perform = require('../internals/perform');
Expand All @@ -14,6 +15,7 @@ require('../internals/export')({ target: 'Promise', stat: true }, {
var resolve = capability.resolve;
var reject = capability.reject;
var result = perform(function () {
var promiseResolve = aFunction(C.resolve);
var errors = [];
var counter = 0;
var remaining = 1;
Expand All @@ -23,7 +25,7 @@ require('../internals/export')({ target: 'Promise', stat: true }, {
var alreadyRejected = false;
errors.push(undefined);
remaining++;
C.resolve(promise).then(function (value) {
promiseResolve.call(C, promise).then(function (value) {
if (alreadyRejected || alreadyResolved) return;
alreadyResolved = true;
resolve(value);
Expand Down

0 comments on commit d6f6d0b

Please sign in to comment.