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)