2017-03-05 145 views
0

如何使用async/await来实现以下目标?async/await如何与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异步/等待/ 7746 /循环与异步 - 等待#t = 201703052353271956842)将有助于... – rasmeister

+0

异步/等待将使这个代码不必要的复杂 - 总是使用最好的工具,而不一定是最新的闪亮的小工具:p –

+0

其实,'await/async'根本不会帮忙 –

回答

6

您需要使用Promise.allArray#map更换您到Array#forEach电话:

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

没有异步/等待,你需要使用额外的'.then'来知道你的循环何时完成。我认为这第三次修订是两全其美的 – gyre

相关问题