From 0964dba51ed4fc3bb8d16b94821872707542a922 Mon Sep 17 00:00:00 2001 From: Valentin Zickner Date: Mon, 24 May 2021 17:25:34 +0200 Subject: [PATCH] improve performance by executing data gathering promises in parallel --- .../api/src/services/data-provider.service.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/apps/api/src/services/data-provider.service.ts b/apps/api/src/services/data-provider.service.ts index c7380dd5f..c5a319148 100644 --- a/apps/api/src/services/data-provider.service.ts +++ b/apps/api/src/services/data-provider.service.ts @@ -132,19 +132,26 @@ export class DataProviderService implements DataProviderInterface { [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; } = {}; + const promises: Promise<{ + data: { [date: string]: IDataProviderHistoricalResponse }; + symbol: string; + }>[] = []; for (const { dataSource, symbol } of aDataGatheringItems) { const dataProvider = this.getDataProvider(dataSource); if (dataProvider.hasHistoricalData(symbol)) { - const data = await dataProvider.getHistorical( - [symbol], - undefined, - from, - to + promises.push( + dataProvider + .getHistorical([symbol], undefined, from, to) + .then((data) => ({ data: data?.[symbol], symbol })) ); - result[symbol] = data?.[symbol]; } } + const allData = await Promise.all(promises); + for (const { data, symbol } of allData) { + result[symbol] = data; + } + return result; }