【发布时间】:2017-02-02 10:04:43
【问题描述】:
我试图将两个异步函数链接在一起,因为第一个函数有一个条件返回参数,导致第二个函数运行或退出模块。但是,我发现了在规范中找不到的奇怪行为。
async function isInLobby() {
//promise.all([chained methods here])
let exit = false;
if (someCondition) exit = true;
}
这是我的代码的混蛋 sn-p(您可以查看完整范围 here),它只是检查玩家是否已经在大厅中,但这无关紧要。
接下来我们有这个异步函数。
async function countPlayer() {
const keyLength = await scardAsync(game);
return keyLength;
}
如果exit === true,则不需要运行此函数。
我试过了
const inLobby = await isInLobby();
我希望这会等待结果,所以我可以使用inLobby 有条件地运行countPlayer,但是我收到了一个没有具体细节的类型错误。
为什么你不能await一个async函数范围之外的函数?我知道这是一个糖承诺,所以它必须链接到then,但是为什么在countPlayer我可以等待另一个承诺,但在外面,我不能awaitisInLobby?
【问题讨论】:
-
您能告诉我们您在哪里您在
await isInLobby()上做的,以及inLobby是如何使用的吗?另外,countPlayer在哪里/如何调用? -
@Bergi 我将我的存储库链接到实际上下文。太多代码无法放入问题中
-
我看不出问题出在哪里(也许你已经更新了 repo)?如果您参考
isInLobby().then( … countPlayer().then …部分,则解决方案很简单:只需制作包含这些调用的函数((req, res) =>之一)async。 -
@Bergi 问题不在于它被破坏了,它按原样工作。我只是不明白为什么顶级等待不是一件事。事实证明,如果不将整个模块定义为异步函数,它还不存在
-
但是您的代码根本不需要 top-level
await?这就是为什么我想知道您是否接受了与问题中的问题无关的答案。
标签: javascript node.js async-await