Deno 顶级等待

Wil*_*een 7 javascript async-await deno

正在阅读deno的主页新的 JS 运行时

我看到了以下代码:

import { serve } from "https://deno.land/std@0.50.0/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
  req.respond({ body: "Hello World\n" });
}
Run Code Online (Sandbox Code Playgroud)

我从未见过以下语法(for await):

for await (const req of s) {
  req.respond({ body: "Hello World\n" });
}
Run Code Online (Sandbox Code Playgroud)

这种语法是什么?

它是特定于 deno 还是在这个 tc39 提案中找到的顶级等待?

编辑:为什么它被使用以外的的async功能?

Mar*_*nde 12

for await...of语句用于遍历异步迭代器,并serve返回一个异步迭代器,其中每次迭代将是一个新的传入请求。

它是特定于 deno 还是在这个 tc39 提案中找到的顶级等待?

不,它不是具体到杰诺,这是一个不同的建议top-level await


这是一个asyncIterator也适用于浏览器的简单示例(非 deno 独占)

const obj = {
   async *[Symbol.asyncIterator]() {
      for(let i = 0; i < 10; i++)
        yield new Promise(resolve => setTimeout(() => resolve(i), 100));
   }
};

(async() => {
  // You don't need the wrapper if the environment 
  // supports top-level await, e.g: Deno
  for await(const i of obj)
    console.log(`${i}`, new Date())

})();
Run Code Online (Sandbox Code Playgroud)


编辑:为什么它可以在异步函数之外使用?

因为 Deno 支持 top-level await