2017-03-05 7 views
0

async/awaitは、以下を達成するためにどのように使用できますか?forEachでasync/awaitをどのように使用できますか?

あなたが Promise.allを使用して Array#mapArray#forEachへの通話を交換する必要が
self.onmessage = event => { 

    // async stuff in forEach needs to finish 
    event.data.search.split(',').forEach((s, i) => { 
    db.get('customers').then(doc => { 
     ... 
    }) 
    }) 

    // before getting here 
} 
+2

おそらく[SO上のドキュメント](http://stackoverflow.com/documentation/javascript/925/async -functions-async-await/7746/looping-with-async-await#t = 201703052353271956842)は役に立ちます... – rasmeister

+0

async/awaitはこのコードを不必要に複雑にします - 必ずしも最新のものではなく、光沢のあるガジェット:p –

+0

実際には 'await/async'はまったく役に立たない –

答えて

6

self.onmessage = async (event) => { 

    // async stuff in forEach needs to finish 
    await Promise.all(event.data.search.split(',').map((s, i) => { 
    return db.get('customers').then(doc => { 
     ... 
    }) 
    })) 

    console.log('All finished!') 

} 
+0

'Promise.all 'それは自分自身の仕事ですが、答えの以前のバージョンは私には好ましいです。 –

+0

各データベース呼び出しの後に 'then'の結果を返すつもりですか?そうでなければ、 'result'変数を削除して、' console.log'行に達するまでにすべてが終了したことだけを知ることができます。 – gyre

+1

async/awaitがなければ、ループが終了したことを知るために余分な '.then'を使う必要があります。私はこの第3改正が両方の世界の中で最高だと思う – gyre

関連する問題