簡體   English   中英

在異步函數之外等待不會在控制台中拋出錯誤

[英]await outside of async function doesn't throw error in console

MDN說

請記住, await關鍵字僅在async函數內有效。 如果在async函數體外使用它,則會出現SyntaxError

但事實並非如此。

在DevTools控制台中嘗試此代碼,沒有錯誤,只是結果:

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

代碼或文檔有什么問題?

MDN文檔是正確的,它解釋了它在JavaScript中的工作原理。

這只是DevTools添加的一項功能,可讓您更輕松地測試異步/等待代碼。 它不是JavaScript功能。

看起來它自2017年8月11日起在DevTools中得到支持:

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

如果你間諜了

ConsoleModel.js

在第129行,它們具有評估標記為異步的表達式的功能:

async evaluateCommandInConsole

沒有錯誤。

您已經找到了DevTools控制台的一個特殊功能 它是讓盡可能簡單的實驗async - await實時環境中的代碼。 您可以想象您在控制台中輸入的任何代碼都會自動包裝在async函數中。 事實上,正如另一個答案所指出的,這正是發生的事情。

重要的是要注意,即使這在控制台中有效,它也不是JavaScript的一個功能。

所以,你的所有觀察結果都是正確的和預期的! MDN文檔是准確的,因為如果您嘗試在async函數之外使用await的頁面上加載腳本,則會出錯。 另一方面,DevTools控制台旨在使其工作(專門用於開發人員工效學),因此您的代碼在控制台中運行時沒有任何錯誤。

這不是DevTools控制台的唯一技巧 通常,如果您真的想測試某些代碼在頁面上的運行方式,那么最好在頁面上實際運行腳本,而不是在控制台中運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM