You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.2 KiB
37 lines
1.2 KiB
import { UdfQuotesResponse, IQuotesProvider } from './iquotes-provider';
|
|
import { QuoteData } from '../../../charting_library/datafeed-api';
|
|
|
|
import {
|
|
getErrorMessage,
|
|
logMessage,
|
|
UdfErrorResponse,
|
|
} from './helpers';
|
|
import { Requester } from './requester';
|
|
|
|
export class QuotesProvider implements IQuotesProvider {
|
|
private readonly _datafeedUrl: string;
|
|
private readonly _requester: Requester;
|
|
|
|
public constructor(datafeedUrl: string, requester: Requester) {
|
|
this._datafeedUrl = datafeedUrl;
|
|
this._requester = requester;
|
|
}
|
|
|
|
public getQuotes(symbols: string[]): Promise<QuoteData[]> {
|
|
return new Promise((resolve: (data: QuoteData[]) => void, reject: (reason: string) => void) => {
|
|
this._requester.sendRequest<UdfQuotesResponse>(this._datafeedUrl, 'quotes', { symbols: symbols })
|
|
.then((response: UdfQuotesResponse | UdfErrorResponse) => {
|
|
if (response.s === 'ok') {
|
|
resolve(response.d);
|
|
} else {
|
|
reject(response.errmsg);
|
|
}
|
|
})
|
|
.catch((error?: string | Error) => {
|
|
const errorMessage = getErrorMessage(error);
|
|
logMessage(`QuotesProvider: getQuotes failed, error=${errorMessage}`);
|
|
reject(`network error: ${errorMessage}`);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|