2017-08-09 54 views
1

async/awaitがfirebase forEachで動作しないようです。このコードは、スナップショットの最初の子のconsole.logを実行し、ハングします。これはバグですか、何か不足していますか?FirebaseデータベーススナップショットForEach Async Await

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