我試圖將兩個異步函數鏈接在一起,因爲第一個函數有一個條件返回參數,導致第二個參數運行或退出模塊。但是,我發現了在規格中找不到的奇怪行爲。在異步函數外使用await
async function isInLobby() {
//promise.all([chained methods here])
let exit = false;
if (someCondition) exit = true;
}
這是我的代碼片段bastardized(你可以看到完整的範圍here),即只檢查是否已經在大堂的球員,但是這無關緊要。
接下來我們有這個異步函數。
async function countPlayer() {
const keyLength = await scardAsync(game);
return keyLength;
}
該功能不需要運行,如果exit === true
。
我試圖做
const inLobby = await isInLobby();
此我希望將等待到的結果,所以我可以用inLobby
有條件地運行countPlayer
,但是我收到一個類型錯誤,沒有具體細節。
爲什麼你不能在await
和async
函數的函數範圍之外?我知道這是一個糖的承諾,所以它必須鏈接到then
但爲什麼它在countPlayer
我可以等待另一個承諾,但在外面,我不能await
isInLobby
?
您能告訴我們您在哪裏*等待了isInLobby()',以及如何使用inLobby?另外,在哪裏/如何調用'countPlayer'? – Bergi
@Bergi我鏈接我的回購實際上下文。太多的代碼放入問題 –
我沒有看到問題出在哪裏(也許你已經更新了回購)?如果你引用了'isInLobby()。then(... countPlayer()。then ...')部分,那麼解決方案就很簡單了:只需要包含這些調用的函數('(req,res)=>') 'async'。 – Bergi