3

Deno 刚刚发布了v1.0

当我检查入门公会时,我显示了一些不寻常的代码。

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" });
}

如果您看到 for 循环,则等待没有异步。

所以我想知道,javascript async/await 和 deno await 是相同的还是不同的?

4

2 回答 2

3

Deno 实现了顶级等待。

顶级 await 使开发人员可以在异步函数之外使用 await 关键字。它就像一个大的异步函数,导致导入它们的其他模块在开始评估它们的主体之前等待。

来源:https ://v8.dev/features/top-level-await

于 2020-05-15T11:05:43.587 回答
3

Deno 支持top-level await目前处于第 3 阶段。

顶级等待使模块能够充当大型异步函数:使用顶级等待,ECMAScript 模块 (ESM) 可以等待资源,导致导入它们的其他模块在开始评估其主体之前等待。

top-level await允许您使用异步获取的数据初始化模块。

// my-module.js
const res = await fetch('https://example.com/some-data');
export default await res.json();
// some module
import data from './my-module.js';
console.log(data); // { "some": "json" }

如果您看到 for 循环,则等待没有异步。

请记住,即使支持, functions usingawait仍然需要关键字。asynctop-level await

function foo() { // async is needed
   const res = await fetch('https://example.com/api/json')
   console.log(res);
}

foo();

上面的代码段仍然会引发错误。


参考:

于 2020-05-15T11:22:37.783 回答