我试图将两个异步函数链接在一起,因为第一个具有条件返回参数,导致第二个参数运行或退出模块.但是,我发现在规格中找不到奇怪的行为.
async function isInLobby() {
//promise.all([chained methods here])
let exit = false;
if (someCondition) exit = true;
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码的一个卑鄙的片段(你可以在这里看到完整的范围),它只是检查一个玩家是否已经在大厅,但这是无关紧要的.
接下来我们有这个异步功能.
async function countPlayer() {
const keyLength = await scardAsync(game);
return keyLength;
}
Run Code Online (Sandbox Code Playgroud)
如果这个函数不需要运行exit === true.
我试着这样做
const inLobby = await isInLobby();
Run Code Online (Sandbox Code Playgroud)
我希望这等待结果,所以我可以inLobby用来有条件地运行countPlayer,但是我收到了一个没有具体细节的类型错误.
为什么你不能await在async函数范围之外的函数?我知道这是一个糖的承诺,所以它必须被束缚,then但为什么countPlayer我可以等待另一个承诺,但在外面,我不能await isInLobby?
我尝试使用/不同的关键字和运算符时如何解释,发现以下语法完全合法:
// awaiting something that isn't a Promise is fine, it's just strange to do:
const foo = await /barbaz/
myFn()Run Code Online (Sandbox Code Playgroud)
错误:
未捕获的ReferenceError:未定义等待
看起来它尝试将解析await为变量名 ..?我期待
等待仅在异步功能中有效
或类似的东西
意外的令牌等待
令我恐惧的是,您甚至可以为其分配以下内容:
const await = 'Wait, this actually works?';
console.log(await);Run Code Online (Sandbox Code Playgroud)
如若不是如此明显的错误原因语法错误,因为它确实有let,finally,break,等?为什么允许这样做?第一个代码片段到底发生了什么?
javascript specifications language-design async-await es2017