For AI agents: the complete documentation index is available at /tc39-atlas/en/llms.txt, the full documentation bundle is available at /tc39-atlas/en/llms-full.txt, and this page is available as Markdown at /tc39-atlas/en/proposals/stage/1/proposal-await.ops.md.
  • English
  • await operations S1

    Proposal details
    Proposal overview

    This proposal introduces await.all, await.race, await.allSettled, and await.any to provide concurrent Promise utilities in an async/await style, reducing the need to directly use Promise methods for common patterns.

    Note

    The README below comes from the upstream repository and may contain outdated stage or status metadata. Use the proposal details above as the current source of truth.

    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)