使用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