У меня есть метод машинописного текста, который возвращает Promise
запроса на указанный c файл конфигурации. Иногда мне понадобится один и тот же файл в разных частях моего приложения, и, поскольку файлы имеют статус c, я хочу избежать дублирования запросов http для одного и того же файла.
Я попытался сделать это, сохранив запросы в массиве пользовательского типа HttpRequestObservable
, который состоит из URL-адреса (URL-адреса запроса) и наблюдаемого для запроса.
Метод getConfiguration
проверит, находится ли запрос в массив, если он есть, он вернет сохраненный Observable
, преобразованный в Promise
, если это не так, он создаст новый Observable
, сохранит его в массиве и вернет его.
Проблема в том, что когда я возвращаю уже созданный Observable
из массива, полученное значение имеет тип string
вместо Object
export interface IHttpRequestObservable {
url: string;
observable: Observable<any>;
}
export class SettingsService {
private _httpRequestsObservables = new Array<IHttpRequestObservable>();
private getConfiguration(folder: string, file: string): Promise<any> {
const url = `/dist/assets/configurations/${folder}/${file}.json`;
if (this._httpRequestsObservables .some(x => x.url === url)) {
return this._httpRequestsObservables .filter(x => x.url === url)[0].observable.toPromise();
}
else {
const observable = this.httpClient.get<any>(url);
this._httpRequestsObservables .push({ url: url, observable: observable });
return observable.toPromise();
}
}
public async test() {
const firstRequest = await this.getConfiguration('global', 'settings');
const secondRequest = await this.getConfiguration('global', 'settings');
console.log('first request:');
console.log(firstRequest);
console.log('second request:');
console.log(secondRequest);
}
}
Когда я вызываю метод test()
, это вывод:
firstRequest
- это объект javascript, в то время как secondRequest
- это просто строка.
Почему secondRequest
не объект?