For AI agents: the complete documentation index is available at /tc39-atlas/llms.txt, the full documentation bundle is available at /tc39-atlas/llms-full.txt, and this page is available as Markdown at /tc39-atlas/proposals/stage/1/proposal-wavy-dot.md.
  • 简体中文
  • Wavy Dot: Syntactic Support for Promise Pipelining S1

    中文标题:波浪点:Promise 管道的语法支持

    提案概览
    提案速览

    该提案引入了新的“波浪点” (~.) 语法用于 promise 管道,为 eventual-send API 提供语法糖。它定义了一个与点 (.) 具有相同优先级的中缀运算符,以实现对 promise 的最终获取和方法调用。

    Note

    以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。

    proposal-wavy-dot

    用于 promise 管道的愉悦表示法。

    • Mark S. Miller @erights, Agoric
    • Michael Fig @michaelfig, Agoric
    • Chip Morningstar @FUDCo, Evernote

    状态

    已提交给 TC39(JavaScript 标准委员会),并达到第 1 阶段。

    向 TC39 演示

    幻灯片

    概要

    这是 proposal-eventual-send 的后续提案,为该提案的 API 提供语法糖。

    2011 年的 ECMAScript 并发 strawman 提案 也描述了一个用于支持 promise 管道的中缀感叹号 (!) 运算符的简单去糖化。为了避免与 TypeScript 冲突,本提案改为引入波浪点 (~.) 语法。

    波浪点

    可选链提案 的 (?.) 类似,波浪点 (~.) 是一个提议的中缀运算符,其优先级与点 (.) 相同。两者都可以理解为 形容词点,即一种类似点的操作,但根据形容词而有所不同。一旦可选链提案被接受,我们将在此提案中添加一个结合这两个形容词的运算符,例如 (?~.) 或 (~?.)。

    当波浪点表达式出现在可能会使用表达式值的语法上下文中时,该语法具有以下等价关系

    语法内部方法
    p~.namep.[[GetSend]]('name')
    p~.[prop]p.[[GetSend]](prop)
      
    p~.(...args)p.[[ApplyFunctionSend]](args)
      
    p~.name(...args)p.[[ApplyMethodSend]]('name', args)
    p~.[prop](...args)p.[[ApplyMethodSend]](prop, args)

    当表达式出现在明显忽略表达式值的语法上下文中,例如 表达式语句 时,等价关系如上,但使用这些内部方法的 [[*SendOnly]] 变体。

    语法内部方法
    void p~.(...args);p.[[ApplyFunctionSendOnly]](args)
      
    void p~.name(...args);p.[[ApplyMethodSendOnly]]('name', args)
    void p~.[prop](...args);p.[[ApplyMethodSendOnly]](prop, args)

    提议的语法

    抽象语法:

     Expression : ...
          Expression ~. [ Expression ]              // eventual get
          Expression ~. Arguments                   // eventual apply function
          Expression ~. [ Expression ] Arguments    // eventual apply method

    尝试性的具体语法,其中 "..." 表示该非终结符的现有产生式。我们的意图是这种语法遵循 可选链提案 的模式。

      WavyDot ::
          ~. [lookahead ∉ DecimalDigit]
    
      MemberExpression : ...
          MemberExpression WavyDot [ Expression ]
          MemberExpression WavyDot IdentifierName
      CallExpression : ...
          CallExpression WavyDot [ Expression ] Arguments
          CallExpression WavyDot IdentifierName Arguments
          MemberExpression WavyDot Arguments
          CallExpression WavyDot Arguments
          CallExpression WavyDot [ Expression ]
          CallExpression WavyDot IdentifierName

    原型

    一个 Babel playground 使用当前作用域中 HandledPromise 对象上的静态方法实现了此提案。 此语法的进行中 Babel Pull Request 也可用。