?
u
m
/
An interface is a set of
The Iterable interface includes the property described in
Property | Value | Requirements |
---|---|---|
@@iterator
|
a function that returns an Iterator object | The returned object must conform to the Iterator interface. |
An object that implements the Iterator interface must include the property in
Property | Value | Requirements |
---|---|---|
|
a function that returns an IteratorResult object |
The returned object must conform to the IteratorResult interface. If a previous call to the next method of an Iterator has returned an IteratorResult object whose next method of that object should also return an IteratorResult object whose |
Arguments may be passed to the next
function but their interpretation and validity is dependent upon the target Iterator. The for-of statement and other common users of Iterators do not pass any arguments, so Iterator objects that expect to be used in such a manner must be prepared to deal with being called with no arguments.
Property | Value | Requirements |
---|---|---|
|
a function that returns an IteratorResult object |
The returned object must conform to the IteratorResult interface. Invoking this method notifies the Iterator object that the caller does not intend to make any more next method calls to the Iterator. The returned IteratorResult object will typically have a return method. However, this requirement is not enforced.
|
|
a function that returns an IteratorResult object |
The returned object must conform to the IteratorResult interface. Invoking this method notifies the Iterator object that the caller has detected an error condition. The argument may be used to identify the error condition and typically will be an exception object. A typical response is to throw the value passed as the argument. If the method does not throw , the returned IteratorResult object will typically have a |
Typically callers of these methods should check for their existence before invoking them. Certain ECMAScript language features including for
-of
, yield*
, and array destructuring call these methods after performing an existence check. Most ECMAScript library functions that accept Iterable objects as arguments also conditionally call them.
The AsyncIterable interface includes the properties described in
Property | Value | Requirements |
---|---|---|
@@asyncIterator |
a function that returns an AsyncIterator object | The returned object must conform to the AsyncIterator interface. |
An object that implements the AsyncIterator interface must include the properties in
Property | Value | Requirements |
---|---|---|
a function that returns a promise for an IteratorResult object |
The returned promise, when fulfilled, must fulfill with an object that conforms to the IteratorResult interface. If a previous call to the Additionally, the IteratorResult object that serves as a fulfillment value should have a |
Arguments may be passed to the next
function but their interpretation and validity is dependent upon the target AsyncIterator. The for
-await
-of
statement and other common users of AsyncIterators do not pass any arguments, so AsyncIterator objects that expect to be used in such a manner must be prepared to deal with being called with no arguments.
Property | Value | Requirements |
---|---|---|
a function that returns a promise for an IteratorResult object |
The returned promise, when fulfilled, must fulfill with an object that conforms to the IteratorResult interface. Invoking this method notifies the AsyncIterator object that the caller does not intend to make any more Additionally, the IteratorResult object that serves as a fulfillment value should have a |
|
a function that returns a promise for an IteratorResult object |
The returned promise, when fulfilled, must fulfill with an object that conforms to the IteratorResult interface. Invoking this method notifies the AsyncIterator object that the caller has detected an error condition. The argument may be used to identify the error condition and typically will be an exception object. A typical response is to return a rejected promise which rejects with the value passed as the argument. If the returned promise is fulfilled, the IteratorResult fulfillment value will typically have a |
Typically callers of these methods should check for their existence before invoking them. Certain ECMAScript language features including for
-await
-of
and yield*
call these methods after performing an existence check.
The IteratorResult interface includes the properties listed in
Property | Value | Requirements |
---|---|---|
|
a Boolean |
This is the result status of an iterator next method call. If the end of the iterator was reached |
|
an |
If done is |
The %IteratorPrototype% object:
All objects defined in this specification that implement the Iterator interface also inherit from %IteratorPrototype%. ECMAScript code may also define objects that inherit from %IteratorPrototype%. The %IteratorPrototype% object provides a place where additional methods that are applicable to all iterator objects may be added.
The following expression is one way that ECMAScript code can access the %IteratorPrototype% object:
Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))
The following steps are taken:
The value of the
The %AsyncIteratorPrototype% object:
All objects defined in this specification that implement the AsyncIterator interface also inherit from %AsyncIteratorPrototype%. ECMAScript code may also define objects that inherit from %AsyncIteratorPrototype%. The %AsyncIteratorPrototype% object provides a place where additional methods that are applicable to all async iterator objects may be added.
The following steps are taken:
The value of the
An Async-from-Sync Iterator object is an async iterator that adapts a specific synchronous iterator. There is not a named
The abstract operation CreateAsyncFromSyncIterator takes argument syncIteratorRecord and returns an
The %AsyncFromSyncIteratorPrototype% object:
Async-from-Sync Iterator instances are
Internal Slot | Type | Description |
---|---|---|
[[SyncIteratorRecord]] |
an |
Represents the original synchronous iterator which is being adapted. |
The abstract operation AsyncFromSyncIteratorContinuation takes arguments result and promiseCapability (a
A Promise is an object that is used as a placeholder for the eventual results of a deferred (and possibly asynchronous) computation.
Any Promise is in one of three mutually exclusive states: fulfilled, rejected, and pending:
p
is fulfilled if p.then(f, r)
will immediately enqueue a f
.
p
is rejected if p.then(f, r)
will immediately enqueue a r
.
A promise is said to be settled if it is not pending, i.e. if it is either fulfilled or rejected.
A promise is resolved if it is settled or if it has been “locked in” to match the state of another promise. Attempting to resolve or reject a resolved promise has no effect. A promise is unresolved if it is not resolved. An unresolved promise is always in the pending state. A resolved promise may be pending, fulfilled or rejected.
A PromiseCapability Record is a
PromiseCapability Records have the fields listed in
Field Name | Value | Meaning |
---|---|---|
[[Promise]] | an Object | An object that is usable as a promise. |
[[Resolve]] |
a |
The function that is used to resolve the given promise. |
[[Reject]] |
a |
The function that is used to reject the given promise. |
IfAbruptRejectPromise is a shorthand for a sequence of algorithm steps that use a
means the same thing as:
The PromiseReaction is a
PromiseReaction records have the fields listed in
Field Name | Value | Meaning |
---|---|---|
[[Capability]] |
a |
The capabilities of the promise for which this record provides a reaction handler. |
[[Type]] |
|
The [[Type]] is used when [[Handler]] is |
[[Handler]] |
a |
The function that should be applied to the incoming value, and whose return value will govern what happens to the derived promise. If [[Handler]] is |
The abstract operation CreateResolvingFunctions takes argument promise and returns a
A promise reject function is an anonymous built-in function that has [[Promise]] and [[AlreadyResolved]] internal slots.
When a promise reject function is called with argument reason, the following steps are taken:
The
A promise resolve function is an anonymous built-in function that has [[Promise]] and [[AlreadyResolved]] internal slots.
When a promise resolve function is called with argument resolution, the following steps are taken:
The
The abstract operation FulfillPromise takes arguments promise and value and returns
The abstract operation NewPromiseCapability takes argument C and returns either a resolve
and reject
functions. The promise plus the resolve
and reject
functions are used to initialize a new
This abstract operation supports Promise subclassing, as it is generic on any
The abstract operation IsPromise takes argument x and returns a Boolean. It checks for the promise brand on an object. It performs the following steps when called:
The abstract operation RejectPromise takes arguments promise and reason and returns
The abstract operation TriggerPromiseReactions takes arguments reactions (a
The
An implementation of HostPromiseRejectionTracker must conform to the following requirements:
The default implementation of HostPromiseRejectionTracker is to return
HostPromiseRejectionTracker is called in two scenarios:
A typical implementation of HostPromiseRejectionTracker might try to notify developers of unhandled rejections, while also being careful to notify them if such previous notifications are later invalidated by new handlers being attached.
If operation is
The abstract operation NewPromiseReactionJob takes arguments reaction (a PromiseReaction
The abstract operation NewPromiseResolveThenableJob takes arguments promiseToResolve, thenable, and then and returns a
The Promise
extends
clause of a class definition. Subclass super
call to the Promise Promise
and Promise.prototype
built-in methods.When the Promise
function is called with argument executor, the following steps are taken:
The executor argument must be a
The resolve function that is passed to an executor function accepts a single argument. The executor code may eventually call the resolve function to indicate that it wishes to resolve the associated Promise. The argument passed to the resolve function represents the eventual value of the deferred action and can be either the actual fulfillment value or another promise which will provide the value if it is fulfilled.
The reject function that is passed to an executor function accepts a single argument. The executor code may eventually call the reject function to indicate that the associated Promise is rejected and will never be fulfilled. The argument passed to the reject function is used as the rejection value of the promise. Typically it will be an Error object.
The resolve and reject functions passed to an executor function by the Promise
The Promise
The all
function returns a new promise which is fulfilled with an array of fulfillment values for the passed promises, or rejects with the reason of the first passed promise that rejects. It resolves all elements of the passed iterable to promises as it runs this algorithm.
The all
function requires its
The abstract operation GetPromiseResolve takes argument promiseConstructor (a
The abstract operation PerformPromiseAll takes arguments iteratorRecord, constructor (a
Promise.all
Resolve Element FunctionsPromise.all
Resolve Element FunctionsPromise.all
Resolve Element FunctionsA Promise.all
resolve element function is an anonymous built-in function that is used to resolve a specific Promise.all
element. Each Promise.all
resolve element function has [[Index]], [[Values]], [[Capability]], [[RemainingElements]], and [[AlreadyCalled]] internal slots.
When a Promise.all
resolve element function is called with argument x, the following steps are taken:
The Promise.all
resolve element function is
The allSettled
function returns a promise that is fulfilled with an array of promise state snapshots, but only after all the original promises have settled, i.e. become either fulfilled or rejected. It resolves all elements of the passed iterable to promises as it runs this algorithm.
The allSettled
function requires its
The abstract operation PerformPromiseAllSettled takes arguments iteratorRecord, constructor (a
Promise.allSettled
Resolve Element FunctionsPromise.allSettled
Resolve Element FunctionsPromise.allSettled
Reject Element FunctionsPromise.allSettled
Reject Element FunctionsPromise.allSettled
Resolve Element FunctionsA Promise.allSettled
resolve element function is an anonymous built-in function that is used to resolve a specific Promise.allSettled
element. Each Promise.allSettled
resolve element function has [[Index]], [[Values]], [[Capability]], [[RemainingElements]], and [[AlreadyCalled]] internal slots.
When a Promise.allSettled
resolve element function is called with argument x, the following steps are taken:
The Promise.allSettled
resolve element function is
Promise.allSettled
Reject Element FunctionsA Promise.allSettled
reject element function is an anonymous built-in function that is used to reject a specific Promise.allSettled
element. Each Promise.allSettled
reject element function has [[Index]], [[Values]], [[Capability]], [[RemainingElements]], and [[AlreadyCalled]] internal slots.
When a Promise.allSettled
reject element function is called with argument x, the following steps are taken:
The Promise.allSettled
reject element function is
The any
function returns a promise that is fulfilled by the first given promise to be fulfilled, or rejected with an AggregateError
holding the rejection reasons if all of the given promises are rejected. It resolves all elements of the passed iterable to promises as it runs this algorithm.
The any
function requires its Promise
The abstract operation PerformPromiseAny takes arguments iteratorRecord, constructor (a
Promise.any
Reject Element FunctionsPromise.any
Reject Element FunctionsPromise.any
Reject Element FunctionsA Promise.any
reject element function is an anonymous built-in function that is used to reject a specific Promise.any
element. Each Promise.any
reject element function has [[Index]], [[Errors]], [[Capability]], [[RemainingElements]], and [[AlreadyCalled]] internal slots.
When a Promise.any
reject element function is called with argument x, the following steps are taken:
The Promise.any
reject element function is
The initial value of Promise.prototype
is the
This property has the attributes { [[Writable]]:
The race
function returns a new promise which is settled in the same way as the first passed promise to settle. It resolves all elements of the passed iterable to promises as it runs this algorithm.
If the iterable argument is empty or if none of the promises in iterable ever settle then the pending promise returned by this method will never be settled.
The race
function expects its resolve
method.
The abstract operation PerformPromiseRace takes arguments iteratorRecord, constructor (a
The reject
function returns a new promise rejected with the passed argument.
The reject
function expects its
The resolve
function returns either a new promise resolved with the passed argument, or the argument itself if the argument is a promise produced by this
The resolve
function expects its
The abstract operation PromiseResolve takes arguments C (a
Promise[@@species]
is an
The value of the
Promise prototype methods normally use their
The Promise prototype object:
When the catch
method is called with argument onRejected, the following steps are taken:
The initial value of Promise.prototype.constructor
is
When the finally
method is called with argument onFinally, the following steps are taken:
When the then
method is called with arguments onFulfilled and onRejected, the following steps are taken:
The abstract operation PerformPromiseThen takes arguments promise, onFulfilled, and onRejected and optional argument resultCapability (a
The initial value of the
This property has the attributes { [[Writable]]:
Promise instances are
Internal Slot | Type | Description |
---|---|---|
[[PromiseState]] |
|
Governs how a promise will react to incoming calls to its then method.
|
[[PromiseResult]] |
an |
The value with which the promise has been fulfilled or rejected, if any. Only meaningful if [[PromiseState]] is not |
[[PromiseFulfillReactions]] |
a |
|
[[PromiseRejectReactions]] |
a |
|
[[PromiseIsHandled]] | a Boolean | Indicates whether the promise has ever had a fulfillment or rejection handler; used in unhandled rejection tracking. |
GeneratorFunctions are functions that are usually created by evaluating
The GeneratorFunction
Function
.GeneratorFunction (…)
is equivalent to the object creation expression new GeneratorFunction (…)
with the same arguments.extends
clause of a class definition. Subclass super
call to the GeneratorFunction The last argument specifies the body (executable code) of a generator function; any preceding arguments specify formal parameters.
When the GeneratorFunction
function is called with some arguments p1, p2, … , pn, body (where n might be 0, that is, there are no “p” arguments, and where body might also not be provided), the following steps are taken:
See NOTE for
The GeneratorFunction
This is a
The initial value of GeneratorFunction.prototype
is the
This property has the attributes { [[Writable]]:
The GeneratorFunction prototype object:
The initial value of GeneratorFunction.prototype.constructor
is
This property has the attributes { [[Writable]]:
The initial value of GeneratorFunction.prototype.prototype
is the
This property has the attributes { [[Writable]]:
The initial value of the
This property has the attributes { [[Writable]]:
Every GeneratorFunction instance is an ECMAScript
Each GeneratorFunction instance has the following own properties:
The specification for the
The specification for the
Whenever a GeneratorFunction instance is created another
This property has the attributes { [[Writable]]:
Unlike Function instances, the object that is the value of the a GeneratorFunction's
AsyncGeneratorFunctions are functions that are usually created by evaluating
The AsyncGeneratorFunction
Function
.AsyncGeneratorFunction (...)
is equivalent to the object creation expression new AsyncGeneratorFunction (...)
with the same arguments.extends
clause of a class definition. Subclass super
call to the AsyncGeneratorFunction The last argument specifies the body (executable code) of an async generator function; any preceding arguments specify formal parameters.
When the AsyncGeneratorFunction
function is called with some arguments p1, p2, … , pn, body (where n might be 0, that is, there are no "p" arguments, and where body might also not be provided), the following steps are taken:
See NOTE for
The AsyncGeneratorFunction
This is a
The initial value of AsyncGeneratorFunction.prototype
is the
This property has the attributes { [[Writable]]:
The AsyncGeneratorFunction prototype object:
The initial value of AsyncGeneratorFunction.prototype.constructor
is
This property has the attributes { [[Writable]]:
The initial value of AsyncGeneratorFunction.prototype.prototype
is the
This property has the attributes { [[Writable]]:
The initial value of the
This property has the attributes { [[Writable]]:
Every AsyncGeneratorFunction instance is an ECMAScript
Each AsyncGeneratorFunction instance has the following own properties:
The value of the
This property has the attributes { [[Writable]]:
The specification for the
Whenever an AsyncGeneratorFunction instance is created another
This property has the attributes { [[Writable]]:
Unlike function instances, the object that is the value of the an AsyncGeneratorFunction's
A Generator is an instance of a generator function and conforms to both the Iterator and Iterable interfaces.
Generator instances directly inherit properties from the object that is the initial value of the
The Generator prototype object:
The initial value of Generator.prototype.constructor
is
This property has the attributes { [[Writable]]:
The return
method performs the following steps:
The throw
method performs the following steps:
The initial value of the
This property has the attributes { [[Writable]]:
Generator instances are initially created with the internal slots described in
Internal Slot | Type | Description |
---|---|---|
[[GeneratorState]] |
|
The current execution state of the generator. |
[[GeneratorContext]] |
an |
The |
[[GeneratorBrand]] |
a String or |
A brand used to distinguish different kinds of generators. The [[GeneratorBrand]] of generators declared by ECMAScript source text is always |
The abstract operation GeneratorStart takes arguments generator and generatorBody (a
The abstract operation GeneratorValidate takes arguments generator and generatorBrand and returns either a
The abstract operation GeneratorResume takes arguments generator, value, and generatorBrand and returns either a
The abstract operation GeneratorResumeAbrupt takes arguments generator, abruptCompletion (a
The abstract operation GetGeneratorKind takes no arguments and returns
The abstract operation GeneratorYield takes argument iterNextObj (an Object that conforms to the IteratorResult interface) and returns either a
The abstract operation Yield takes argument value (an
The abstract operation CreateIteratorFromClosure takes arguments closure (an
An AsyncGenerator is an instance of an async generator function and conforms to both the AsyncIterator and AsyncIterable interfaces.
AsyncGenerator instances directly inherit properties from the object that is the initial value of the
The AsyncGenerator prototype object:
The initial value of AsyncGenerator.prototype.constructor
is
This property has the attributes { [[Writable]]:
The initial value of the
This property has the attributes { [[Writable]]:
AsyncGenerator instances are initially created with the internal slots described below:
Internal Slot | Type | Description |
---|---|---|
[[AsyncGeneratorState]] | The current execution state of the async generator. | |
[[AsyncGeneratorContext]] | an |
The |
[[AsyncGeneratorQueue]] | a |
|
[[GeneratorBrand]] | a String or |
A brand used to distinguish different kinds of async generators. The [[GeneratorBrand]] of async generators declared by ECMAScript source text is always |
An AsyncGeneratorRequest is a
They have the following fields:
Field Name | Value | Meaning |
---|---|---|
[[Completion]] | a |
The |
[[Capability]] | a |
The promise capabilities associated with this request. |
The abstract operation AsyncGeneratorStart takes arguments generator (an AsyncGenerator) and generatorBody (a
The abstract operation AsyncGeneratorValidate takes arguments generator and generatorBrand and returns either a
The abstract operation AsyncGeneratorEnqueue takes arguments generator (an AsyncGenerator), completion (a
The abstract operation AsyncGeneratorCompleteStep takes arguments generator (an AsyncGenerator), completion (a
The abstract operation AsyncGeneratorResume takes arguments generator (an AsyncGenerator) and completion (a
The abstract operation AsyncGeneratorUnwrapYieldResumption takes argument resumptionValue (a
The abstract operation AsyncGeneratorYield takes argument value and returns either a
The abstract operation AsyncGeneratorAwaitReturn takes argument generator (an AsyncGenerator) and returns either a
The abstract operation AsyncGeneratorDrainQueue takes argument generator (an AsyncGenerator) and returns
The abstract operation CreateAsyncIteratorFromClosure takes arguments closure (an
AsyncFunctions are functions that are usually created by evaluating
The AsyncFunction
Function
.AsyncFunction(…)
is equivalent to the object creation expression new AsyncFunction(…)
with the same arguments.extends
clause of a class definition. Subclass super
call to the AsyncFunction The last argument specifies the body (executable code) of an async function. Any preceding arguments specify formal parameters.
When the AsyncFunction
function is called with some arguments p1, p2, … , pn, body (where n might be 0, that is, there are no p arguments, and where body might also not be provided), the following steps are taken:
The AsyncFunction
This is a
The initial value of AsyncFunction.prototype
is the
This property has the attributes { [[Writable]]:
The AsyncFunction prototype object:
The initial value of AsyncFunction.prototype.constructor
is
This property has the attributes { [[Writable]]:
The initial value of the
This property has the attributes { [[Writable]]:
Every AsyncFunction instance is an ECMAScript
Each AsyncFunction instance has the following own properties:
The specification for the
The specification for the
The abstract operation AsyncFunctionStart takes arguments promiseCapability (a
The abstract operation AsyncBlockStart takes arguments promiseCapability (a