相关疑难解决方法(0)

在异步函数之外使用await

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

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,但是我收到了一个没有具体细节的类型错误.

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

javascript node.js async-await

53
推荐指数
4
解决办法
6万
查看次数

为什么等待和异步有效的变量名?

我尝试使用/不同的关键字和运算符时如何解释,发现以下语法完全合法:

// 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)

如若不是如此明显的错误原因语法错误,因为它确实有letfinallybreak,等?为什么允许这样做?第一个代码片段到底发生了什么?

javascript specifications language-design async-await es2017

30
推荐指数
1
解决办法
2960
查看次数