我现在有以下代码,从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()作为并行请求的好方法,节省了大量时间。当有像我的例子中那样的嵌套循环时,我该如何做呢?
发布于 2022-07-05 03:35:15
只需创建一个数组来履行承诺,例如,称为promises
然后将每个请求推送到该数组,而不是等待它。
等待Promise.allSettled(承诺)
注意:由于内部请求需要newMeeting,所以您仍然需要等待.不过,你也可以避免这种情况。
但是,这是一个开始
const promises = [];
for (const meeting of meetingList) {
const newMeeting = await createMeeting(meeting);
for (const event of meeting.events) {
promises.push(createEvent(event, newMeeting.id));
for (const competitor of event.competitors) {
promises.push(createCompetitor(competitor));
promises.push(createRacingEventCompetitor(competitor, event.id));
}
}
}
await Promise.allSettled(promises);不确定这是最好的方法使一切并行,但这是一种方法。
const promises = [];
for (const meeting of meetingList) {
promises.push(
createMeeting(meeting)
.then(newMeeting => {
const innerPromises = [];
for (const event of meeting.events) {
innerPromises.push(createEvent(event, newMeeting.id));
for (const competitor of event.competitors) {
innerPromises.push(createCompetitor(competitor));
innerPromises.push(createRacingEventCompetitor(competitor, event.id));
}
}
return Promise.allSettled(innerPromises);
})
);
}
await Promise.allSettled(promises);https://stackoverflow.com/questions/72863690
复制相似问题