From bd789a49a774c25ee134d70e1af2caff3b3915ed Mon Sep 17 00:00:00 2001 From: Denis Pushkarev Date: Sat, 9 Jul 2022 08:12:05 +0700 Subject: [PATCH] avoid extra promise creation https://github.com/tc39/proposal-iterator-helpers/pull/197 --- packages/core-js/internals/async-iterator-create-proxy.js | 6 ++++-- packages/core-js/modules/esnext.async-iterator.from.js | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/core-js/internals/async-iterator-create-proxy.js b/packages/core-js/internals/async-iterator-create-proxy.js index 9e8c973af8d9..cad85f4f782d 100644 --- a/packages/core-js/internals/async-iterator-create-proxy.js +++ b/packages/core-js/internals/async-iterator-create-proxy.js @@ -1,5 +1,6 @@ 'use strict'; var call = require('../internals/function-call'); +var perform = require('../internals/perform'); var anObject = require('../internals/an-object'); var create = require('../internals/object-create'); var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); @@ -32,10 +33,11 @@ module.exports = function (nextHandler, IS_ITERATOR) { AsyncIteratorProxy.prototype = defineBuiltIns(create(AsyncIteratorPrototype), { next: function next() { var that = this; - return new Promise(function (resolve) { + var result = perform(function () { var state = getInternalState(that); - resolve(state.done ? { done: true, value: undefined } : anObject(call(nextHandler, state, Promise))); + return state.done ? { done: true, value: undefined } : anObject(call(nextHandler, state, Promise)); }); + return result.error ? Promise.reject(result.value) : Promise.resolve(result.value); }, 'return': function (value) { var that = this; diff --git a/packages/core-js/modules/esnext.async-iterator.from.js b/packages/core-js/modules/esnext.async-iterator.from.js index 0870fed2db72..c34176747d07 100644 --- a/packages/core-js/modules/esnext.async-iterator.from.js +++ b/packages/core-js/modules/esnext.async-iterator.from.js @@ -1,7 +1,6 @@ // https://github.com/tc39/proposal-iterator-helpers var $ = require('../internals/export'); var call = require('../internals/function-call'); -var anObject = require('../internals/an-object'); var toObject = require('../internals/to-object'); var isPrototypeOf = require('../internals/object-is-prototype-of'); var AsyncIteratorPrototype = require('../internals/async-iterator-prototype'); @@ -17,7 +16,7 @@ var AsyncFromSyncIterator = require('../internals/async-from-sync-iterator'); var ASYNC_ITERATOR = wellKnownSymbol('asyncIterator'); var AsyncIteratorProxy = createAsyncIteratorProxy(function () { - return anObject(call(this.next, this.iterator)); + return call(this.next, this.iterator); }, true); $({ target: 'AsyncIterator', stat: true, forced: true }, {