|
|
|
|
@ -35,6 +35,10 @@ import {
|
|
|
|
|
Quote,
|
|
|
|
|
QuoteResponseArray
|
|
|
|
|
} from 'yahoo-finance2/esm/src/modules/quote';
|
|
|
|
|
import {
|
|
|
|
|
Price,
|
|
|
|
|
QuoteSummaryResult
|
|
|
|
|
} from 'yahoo-finance2/esm/src/modules/quoteSummary';
|
|
|
|
|
import { SearchQuoteNonYahoo } from 'yahoo-finance2/esm/src/modules/search';
|
|
|
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
|
@ -191,10 +195,7 @@ export class YahooFinanceService implements DataProviderInterface {
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
let quotes: Pick<
|
|
|
|
|
Quote,
|
|
|
|
|
'currency' | 'marketState' | 'regularMarketPrice' | 'symbol'
|
|
|
|
|
>[] = [];
|
|
|
|
|
let quotes: Price[] | Quote[] = [];
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
quotes = await this.yahooFinance.quote(yahooFinanceSymbols);
|
|
|
|
|
@ -357,23 +358,28 @@ export class YahooFinanceService implements DataProviderInterface {
|
|
|
|
|
|
|
|
|
|
private async getQuotesWithQuoteSummary(aYahooFinanceSymbols: string[]) {
|
|
|
|
|
const quoteSummaryPromises = aYahooFinanceSymbols.map((symbol) => {
|
|
|
|
|
return this.yahooFinance.quoteSummary(symbol).catch(() => {
|
|
|
|
|
Logger.error(
|
|
|
|
|
`Could not get quote summary for ${symbol}`,
|
|
|
|
|
'YahooFinanceService'
|
|
|
|
|
);
|
|
|
|
|
return null;
|
|
|
|
|
});
|
|
|
|
|
return this.yahooFinance.quoteSummary(symbol);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const quoteSummaryItems = await Promise.all(quoteSummaryPromises);
|
|
|
|
|
const settledResults = await Promise.allSettled(quoteSummaryPromises);
|
|
|
|
|
|
|
|
|
|
return settledResults
|
|
|
|
|
.filter(
|
|
|
|
|
(result): result is PromiseFulfilledResult<QuoteSummaryResult> => {
|
|
|
|
|
if (result.status === 'rejected') {
|
|
|
|
|
Logger.error(
|
|
|
|
|
`Could not get quote summary: ${result.reason}`,
|
|
|
|
|
'YahooFinanceService'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return quoteSummaryItems
|
|
|
|
|
.filter((item) => {
|
|
|
|
|
return item !== null;
|
|
|
|
|
})
|
|
|
|
|
.map(({ price }) => {
|
|
|
|
|
return price;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
.map(({ value }) => {
|
|
|
|
|
return value.price;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|