fetch historical rates for multiple dates concurrently

fetchNeededHistoricalRates awaited each date's fetch sequentially even
though they're independent requests — a sheet referencing several
historical dates paid for that latency serially instead of in parallel.
This commit is contained in:
Horizontal42 2026-07-08 14:06:00 +03:00
parent 697f1f0e3d
commit 40b5b94102

View file

@ -568,11 +568,20 @@ const HIST_DATE_RE = /(?:on|на)\s+(\d{4}-\d{2}-\d{2})/gi;
async function fetchNeededHistoricalRates(text: string): Promise<void> {
const dates = new Set<string>();
for (const m of text.matchAll(HIST_DATE_RE)) dates.add(m[1]!);
const datesToFetch = Array.from(dates).filter((date) => !engine.hasHistoricalRates(date));
let fetched = false;
for (const date of dates) {
if (!engine.hasHistoricalRates(date)) {
if (datesToFetch.length > 0) {
const results = await Promise.all(
datesToFetch.map(async (date) => {
const rates = await fetchHistoricalRates(date);
if (rates) { engine.setHistoricalRates(date, rates); fetched = true; }
return { date, rates };
})
);
for (const { date, rates } of results) {
if (rates) {
engine.setHistoricalRates(date, rates);
fetched = true;
}
}
}
if (fetched) { workspace.invalidateAll(); editor.refresh(); }