2017-08-09 72 views
1

異步/等待似乎不適用於Firebase forEach。此代碼爲快照的第一個子節點運行console.log,然後掛起。這是一個錯誤還是我錯過了什麼?Firebase數據庫快照ForEach異步等待

main() 
async function main() { 
    const snap = await root.ref('somepath') 
    .once('value') 

    snap.forEach(async val => { 
    await console.log(val.key) 

    }) 
} 

回答

0

這是一個功能的無意的後果,有時候被稱爲錯誤。從firebase文檔: Firebase documentation

async函數總是返回一個Promise。並承諾是真實的 - y值:

!!Promise.resolve===true

作爲一種變通方法,嘗試此解決方案:

main() 
async function main() { 
    const snap = await root.ref('somepath') 
    .once('value') 

    snap.forEach(function wrapper(){async val => { 
    await console.log(val.key) 
    }}) 

它不會等待承諾移動到下一個快照,雖然之前完成。這將需要更多的代碼,但這可能不是你需要的。

+0

感謝您的回答。很好的解釋。我認爲firebase文檔非常好。驚訝我錯過了。 我發現它後,我看到了這個權利。這種反應只是緩慢;) – prozac