使用asynchronous函数之外的等待

我试图链接两个asynchronous函数在一起,因为第一个有一个条件返回参数,导致第二个要么运行,要么退出模块。 但是,我发现在规格中找不到奇怪的行为。

async function isInLobby() { //promise.all([chained methods here]) let exit = false; if (someCondition) exit = true; } 

这是我的代码的一个混蛋片段(你可以在这里看到完整的范围),这只是检查一个球员,如果已经在大厅,但这是无关紧要的。

接下来我们有这个asynchronous函数。

 async function countPlayer() { const keyLength = await scardAsync(game); return keyLength; } 

如果exit === true这个函数不需要运行。

我试图做

 const inLobby = await isInLobby(); 

这个我希望等待结果,所以我可以使用inLobby有条件地运行countPlayer ,但是我收到了没有具体细节的typeerror。

为什么你不能await函数范围之外的async函数呢? 我知道这是一个糖的承诺,所以它必须被链接,但为什么在这个countPlayer我可以等待另一个承诺,但在外面,我不能await isInLobby

不支持顶层await 。 标准委员会为什么会讨论这个问题 ,比如这个Github问题 。

Github上也有一个关于为什么最高级别等待是一个坏主意的想法。 具体来说,他build议如果你有这样的代码:

 // data.js const data = await fetch( '/data.json' ); export default data; 

现在任何导入data.js文件都不会执行直到抓取完成,所以现在所有的模块加载都被阻塞了。 这使得很难推断应用程序模块顺序,因为我们习惯于同步和可预测地执行顶级Javascript。 如果这是允许的,知道何时定义函数变得棘手。

总是有这个当然:

 (async () => { await ... })(); 

这使得asynchronous的一个快速的function,你可以使用等待。 它可以节省您制作非常好的asynchronousfunction的需求! //学分Silve2611