如何用Promise.Allsettled在嵌套循环中替换异步/等待?
目前,我有以下代码从API中提取数据并将其解析到我的数据库中。最多需要5分钟,因为一天中最多可以举行50次聚会,每个会议都有十几个左右的比赛,每个活动最多都有20名跑步者。将其视为田径比赛。有时,此脚本正在插入10,000行。
// Create Meetings
for (const meeting of meetingList) {
const newMeeting = await createMeeting(meeting);
// Create/Update Events
for (const event of meeting.events) {
await createEvent(event, newMeeting.id);
// Create/Update Competitors
for (const competitor of event.competitors) {
await createCompetitor(competitor);
await createRacingEventCompetitor(competitor, event.id);
}
}
}
以前,我使用了Promise.allSettled()作为并行提出请求的好方法,节省了大量时间。当您像我的示例中一样,当您嵌套循环时,我该怎么做?
I currently have the below code pulling data from an API and parsing it into my database. It takes up to 5 minutes since there can be up to 50 meets in a day, each with a dozen or so seperate events and each event has up to 20 runners. Think of it like an athletics meet. Sometimes this script is inserting 10,000 rows.
// Create Meetings
for (const meeting of meetingList) {
const newMeeting = await createMeeting(meeting);
// Create/Update Events
for (const event of meeting.events) {
await createEvent(event, newMeeting.id);
// Create/Update Competitors
for (const competitor of event.competitors) {
await createCompetitor(competitor);
await createRacingEventCompetitor(competitor, event.id);
}
}
}
Previously, I've used Promise.allSettled() as a nice way to make requests in parallel, saving significant time. How do I do the same when you have nested loops like in my example?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
只需创建一个数组来持有承诺,称为
Promises
,然后将每个请求推到该数组而不是等待它
并等待Plosis.alsettled.alsettled(承诺)
注意:因为
new> newMeeting
所需内部
请求
Simply create an array to hold the promises, called
promises
for exampleThen push each request to that array instead of awaiting it
And await Promise.allSettled(promises)
Note: since
newMeeting
is required for the inner requests, you still need to await that ... though, there is a way you can avoid that tooBut, this is a start
Not sure this is the BEST way to make everything parallel, but it is one way