我一直在尝试使用 Typescript,但我现在对如何有效地使用 async/await 有点困惑。
我将一堆记录插入到数据库中,我需要获取每次插入返回的 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 中使用 async/await 实现这种有限的并行性是否有一种相当优雅的方法?或者我是否试图让这个功能做一些它不适合的事情?
PS:我知道数据库有批量插入方法,这个例子有点人为,因为我可以使用这些方法来解决这个特定问题。但这让我想知道我没有可用的预定义批量方法的一般情况,例如网络请求