Browse Source

improve performance by executing data gathering promises in parallel

pull/123/head
Valentin Zickner 4 years ago
parent
commit
0964dba51e
  1. 19
      apps/api/src/services/data-provider.service.ts

19
apps/api/src/services/data-provider.service.ts

@ -132,19 +132,26 @@ export class DataProviderService implements DataProviderInterface {
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; [symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
} = {}; } = {};
const promises: Promise<{
data: { [date: string]: IDataProviderHistoricalResponse };
symbol: string;
}>[] = [];
for (const { dataSource, symbol } of aDataGatheringItems) { for (const { dataSource, symbol } of aDataGatheringItems) {
const dataProvider = this.getDataProvider(dataSource); const dataProvider = this.getDataProvider(dataSource);
if (dataProvider.hasHistoricalData(symbol)) { if (dataProvider.hasHistoricalData(symbol)) {
const data = await dataProvider.getHistorical( promises.push(
[symbol], dataProvider
undefined, .getHistorical([symbol], undefined, from, to)
from, .then((data) => ({ data: data?.[symbol], symbol }))
to
); );
result[symbol] = data?.[symbol];
} }
} }
const allData = await Promise.all(promises);
for (const { data, symbol } of allData) {
result[symbol] = data;
}
return result; return result;
} }

Loading…
Cancel
Save