Stage 1
Classification: Syntactic Change Semantic Change
Human Validated: KW
Title: await operations
Authors: Jack Works
Champions: Jack Works, Jordan Harband
Last Presented: July 2020
Stage Upgrades:
Stage 1: 2020-08-25
Stage 2: NA
Stage 2.7: NA
Stage 3: NA
Stage 4: NA
Last Commit: 2022-11-21
Topics: async concurrency
Keywords: promise concurrency asynchronous wait
GitHub Link: https://github.com/tc39/proposal-await.ops
GitHub Note Link: https://github.com/tc39/notes/blob/HEAD/meetings/2020-07/july-22.md#await-operations-for-stage-1
Proposal Description:
await operations proposal
The rendered spec text. Playground Link
Introduce await.all / await.race / await.allSettled / await.any to simplify the usage of async functions
Stage: 1
Champions: Jack Works, Jordan Harband
Motivation
When developers use async functions, they have to know about Promise if they want to handle multiple tasks concurrently (Promise.all
, eg), this is some kind of “abstraction leak”.
This proposal is intended to fix the problem by introducing concurrent Promise utils in the async-await style.
Drafted solution
// before
await Promise.all(users.map(async x => fetchProfile(x.id)))
// after
await.all users.map(async x => fetchProfile(x.id))
Syntax:
await.all expr
// eq: await Promise.all(expr)
await.race expr
// eq: await Promise.race(expr)
await.allSettled expr
// eq: await Promise.allSettled(expr)
await.any expr
// eq: await Promise.any(expr)