TC39 7月全员会议即将在北京时间7月21日凌晨1:00开始,连续4天召开。而这次会议的议程也已经在本周冻结,这次会议的议程包含如 Promise.any(演进 Stage 4),WeakRef(演进 Stage 4),条件 import(演进 Stage 3),数组 Slice 语法糖(演进 Stage 3),Record & Tuple (演进 Stage 2)等等提案和议题,完整议程可以查阅 https://github.com/tc39/agendas/blob/master/2020/07.md

    议程中的提案都会在下周的 TC39 会议中讨论,如果你对于这些提案、议题有任何疑问和顾虑,可以联系 @吞吞(legendecas)

    这次会议中,@吞吞(legendecas) 也会提议 JavaScript 异步上下文提案演进 Stage 1。异步上下文提案是为了解决异步逻辑流程中跟踪应用上下文的问题,如应用行为逻辑关联追踪、应用性能观测、服务端安全检查等等都需要基于无侵入的上下文来维护应用逻辑状态的跟踪。在其他语言与执行环境中,我们通常有如 ThreadLocal、AsyncLocal 等概念来维护逻辑状态。
    JavaScript 普遍被用在单线程执行的环境中,如浏览器、Node.js。在这个执行模型中,IO、用户交互等外部能力,普遍采用了基于事件、回调等 JavaScript 特色的异步 API 范式。自从 Promise、async/await 引入了 JavaScript,越来越多的应用开始使用这些由语言本身提供的异步逻辑控制流来编写代码。在 async/await 之前,如浏览器、Node.js 所提供的 API 都能被纯 JavaScript 库通过 monkey-patch 来连接异步执行流程。但是 async/await 语法是由 JavaScript 提供的操作,这些操作无法被纯 JavaScript 代码 patch,而为了兼容广泛使用的 Promise 库如 Bluebird(ECMAScript Thenable),await 可以作用在任意 thenable 对象上,thenable 被实际执行时,JavaScript 代码已经无法再关联执行上下文(ECMAScript 6.2.3.1 Await)。这也造成了 JavaScript 需要内置的异步上下文逻辑关联的支持,才能完整地支撑我们的使用场景。
    而提案就是基于异步逻辑上下文的关联,为 JavaScript 提供 AsyncLocal 的内置对象作为 JavaScript 能访问到的 API 来访问当前异步逻辑上下文的特有数据,跟踪应用的逻辑上下文。

    7月议程中的提案都会在下周的 TC39 会议中讨论,如果你对于这些提案、议题有任何疑问和顾虑,可以联系 @吞吞(legendecas)