Skip to content
This repository has been archived by the owner on Jan 26, 2022. It is now read-only.

Latest commit

 

History

History
62 lines (51 loc) · 4.46 KB

spec.md

File metadata and controls

62 lines (51 loc) · 4.46 KB

Promise.prototype.finally ( onFinally )

When the finally method is called with argument onFinally, the following steps are taken:

  1. Let promise be the this value.
  2. If Type(promise) is not Object, throw a TypeError exception.
  3. Assert: IsConstructor(C) is true. 1. If IsCallable(onFinally) is false,
    1. Let thenFinally be onFinally.
    2. Let catchFinally be onFinally. 1. Else,
    3. Let thenFinally be a new built-in function object as defined in ThenFinally Function.
    4. Let catchFinally be a new built-in function object as defined in CatchFinally Function.
    5. Set thenFinally and catchFinally's [[Constructor]] internal slots to C.
    6. Set thenFinally and catchFinally's [[OnFinally]] internal slots to onFinally.
  4. Return ? Invoke(promise, "then", « thenFinally, catchFinally »).

ThenFinally Function

A ThenFinally function is an anonymous built-in function that has a [[Constructor]] and an [[OnFinally]] internal slot. The value of the [[Constructor]] internal slot is a Promise-like constructor function object, and the value of the [[OnFinally]] internal slot is a function object.

When a ThenFinally function F is called with argument value, the following steps are taken:

  1. Let onFinally be F.[[OnFinally]].
  2. Assert: IsCallable(onFinally) is true.
  3. Let result be ? Call(onFinally, undefined).
  4. Let C be F.[[Constructor]].
  5. Assert: IsConstructor(C) is true.
  6. Let promise be ? PromiseResolve(C, result).
  7. Let valueThunk be equivalent to a function that returns value.
  8. Return ? Invoke(promise, "then", « valueThunk »).

CatchFinally Function

A CatchFinally function is an anonymous built-in function that has a [[Constructor]] and an [[OnFinally]] internal slot. The value of the [[Constructor]] internal slot is a Promise-like constructor function object, and the value of the [[OnFinally]] internal slot is a function object.

When a CatchFinally function F is called with argument reason, the following steps are taken:

  1. Let onFinally be F.[[OnFinally]].
  2. Assert: IsCallable(onFinally) is true.
  3. Let result be ? Call(onFinally, undefined).
  4. Let C be F.[[Constructor]].
  5. Assert: IsConstructor(C) is true.
  6. Let promise be ? PromiseResolve(C, result).
  7. Let thrower be equivalent to a function that throws reason.
  8. Return ? Invoke(promise, "then", « thrower »).

Promise.resolve ( x )

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 constructor.

  1. Let C be the this value.
  2. If Type(C) is not Object, throw a TypeError exception.
  3. Return ? PromiseResolve(C, x).

Note: the resolve function expects its this value to be a constructor function that supports the parameter conventions of the Promise constructor.

PromiseResolve ( C, x )

The abstract operation PromiseResolve, given a constructor and a value, returns a new promise resolved with that value.

  1. Assert: Type(C) is Object.
  2. If IsPromise(x) is true, then 1. Let xConstructor be ? Get(x, "constructor"). 1. If SameValue(xConstructor, C) is true, return x.
  3. Let promiseCapability be ? NewPromiseCapability(C).
  4. Perform ? Call(promiseCapability.[[Resolve]], undefined, « x »).
  5. Return promiseCapability.[[Promise]].