Same Promise возвращает различные типы проанализированного значения JSON (как объект и как необработанная строка) - PullRequest
0 голосов
/ 30 марта 2020

У меня есть метод машинописного текста, который возвращает 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(), это вывод:

output

firstRequest - это объект javascript, в то время как secondRequest - это просто строка.

Почему secondRequest не объект?

...