Стоит задача принять массив с данными, на основе которых нужно сделать асинхронные запросы, может возникнуть ошибка, по итогу нужно вернуть результаты успешных запросов. Главный вопрос - правильно ли у меня расставлены типы, как лучше сюда внедрить typescript?
import { Idividend, ImainStock } from "~/types/stocks/mainStock";
import { ItinkoffAPITickers } from "~/types/stocks/tinkoffAPITickers";
export default async function(tickers: Array<ItinkoffAPITickers>): Promise<Array<ImainStock>> {
console.log("[API fetchHistoricalDiv.js]");
const currentDate: number = Math.floor(Date.now() / 1000);
const twoPrevYears: number =
new Date(new Date().getFullYear() - 2, 0).getTime() / 1000;
let parsedStocks = await Promise.all(
tickers.map(async (e: ItinkoffAPITickers): Promise<ImainStock | null> => {
let ticker: string = '';
if (e.currency === "USD") {
ticker = e.ticker;
} else if (e.currency === "RUB") {
ticker = e.ticker + ".ME";
} else if (e.currency === "EUR") {
ticker = e.ticker.replace("@", ".");
}
try {
const responsePriceAndDividendsByTicker = await fetch(
`https://query1.finance.yahoo.com/v8/finance/chart/${ticker}?period1=${twoPrevYears}&period2=${currentDate}&interval=1mo&includePrePost=true&events=div%7Csplit`
);
const dataPriceAndDividendsByTicker = await responsePriceAndDividendsByTicker.json();
const price = dataPriceAndDividendsByTicker.chart.result[0].meta.regularMarketPrice;
const dividends: Array<Idividend> = Object.values(dataPriceAndDividendsByTicker.chart.result[0].events.dividends)
return {
text: `[${e.ticker}] - ${e.name}`,
value: {
...e,
price,
dividends
}
};
} catch (error) {
console.log("error", error);
return null
}
})
)
const resulStocks = parsedStocks.filter((e): boolean => !!e ) as Array<ImainStock>
return resulStocks;
}