我一直在使用Typescript进行一些实验,但现在有点卡在如何有效使用异步/等待。与Typescript/ES7中异步/等待的并行性有限
我插入一堆记录到数据库中,我需要得到每个插入返回的ID列表。下面的简单示例通常适用,但它并不像我想的那么优雅,而且它完全是顺序的。
async function generatePersons() {
const names = generateNames(firstNames, lastNames);
let ids = []
for (let name of names) {
const id = await db("persons").insert({
first_name: name.firstName,
last_name: name.lastName,
}).returning('id');
ids.push(id[0])
}
return ids
}
我试图用map
避免手动创建ids
名单,但我能得到这个工作。
我还想要的是有限的并行性。所以我的异步调用应该在一定限度内并行发生,例如我只想要有10个打开的请求,但不是更多。
在Typescript或Javascript ES7中,是否有一种合理优雅的方式来实现异步/等待的这种有限并行?或者我是否试图让这个功能做一些它不是为了什么? PS:我知道有数据库的批量插入方法,这个例子有点人为,因为我可以使用这些来解决这个特定的问题。但是这让我想到了我没有预定义批量方法的一般情况,例如与网络请求
“并行”是2时执行上下文同时运行(可能在2个不同的计算单元上)。你不能在JS中获得。 – zerkms
[由于非平行等待承诺导致速度减慢](http://stackoverflow.com/q/24193595/1048572)? – Bergi
看看[使用异步/等待与forEach循环](http://stackoverflow.com/q/37576685/1048572) – Bergi