在异步功能之外等待不会在控制台中引发错误

时间:2018-12-23 17:24:30

标签: javascript asynchronous async-await console google-chrome-devtools

MDN says

  

请记住,await关键字仅在async函数内部有效。如果在async函数的主体外部使用它,则会得到SyntaxError

但这不是真的。

在DevTools控制台中尝试此代码,没有错误,仅显示结果:

async function a(val) { return val; }
await a(10) // await is not inside async function
10

代码或文档有什么问题?

2 个答案:

答案 0 :(得分:9)

MDN文档是正确的,它解释了它在JavaScript中的工作方式。

这只是DevTools添加的一项功能,可让您更轻松地测试异步/等待代码。它不是JavaScript功能。

自2017年11月8日以来,似乎已在DevTools中提供支持:

https://chromium.googlesource.com/chromium/src.git/+/e8111c396fef38da6654093433b4be93bed01dce

如果您监视

ConsoleModel.js

在129行,它们具有评估标记为异步的表达式的功能:

async evaluateCommandInConsole

答案 1 :(得分:8)

没事。

您找到了special feature of the DevTools console!在to make it as easy as possible中可以在实时环境中试用async-await代码。您可以想象,您在控制台中输入的任何代码都会自动包装在async函数中。实际上,正如另一个答案所指出的,这正是发生的情况。

重要的是要注意,即使这可以在控制台中使用,但它不是JavaScript的功能。

因此,您的所有观察结果都是正确和预期的! MDN文档是准确的,因为如果您尝试在await函数外部使用async的页面上加载脚本,则会出错。另一方面,DevTools控制台旨在完成这项工作(专门针对开发人员的人机工程学),因此您的代码可以在控制台中运行而不会出现任何错误。

这不是唯一的trick the DevTools console has up its sleeve。通常,如果您真的要测试某些代码在页面上的运行方式,那么最好在页面上而不是在控制台上实际运行脚本。