share () не работает в Angular HTTP-вызовах - PullRequest
1 голос
/ 12 марта 2019

Я только что заметил, что мои HTTP-вызовы больше не распределяются между компонентами.Я не уверен, с какой версии.

Уже проверил это решение: Наблюдаемый общий ресурс Angular2 не работает

, что еще больше усугубляет проблему (больше вызовов HTTP), яДолжен признаться, мне всегда было трудно понять rxjs.

Вот моя сервисная функция:

getSomeData(): Promise < any > 
{
    if(this.data) // should keep service from doing extra http for the same request
    {
        return Promise.resolve(this.data);
    }
    else
    {
        return this.http.post(this.createURL('getData',{}),JSON.stringify({}), this.createGetOptions())
            .timeout(environment.timeout)
            .share()
            .map((response: Response) => {
                return response;
            }).toPromise();
    }
}

Я звоню из разных компонентов

this.service.getSomeData().then((data: any) => 
{
    if (data) {
   ...

createGetOptionsпросто добавляет заголовки, такие как 'Content-Type': 'text/plain; charset=UTF-8'

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Вам нужно использовать оператор pipe в Angular 6+ следующим образом вместо цепочки:

Пример -

getSomeData(): Promise < any > 
{
    if(this.data) // should keep service from doing extra http for the same request
    {
        return Promise.resolve(this.data);
    }
    else
    {
     return this.http.post(this.createURL('getData',{}),JSON.stringify({}), this.createGetOptions()).pipe(
                timeout(environment.timeout),
                share(),
                map((response: Response) => {
                    return response;
                })).toPromise();
    }
}

Также убедитесь, что вы импортируете долю следующим образом:

import {share} from 'rxjs/operators';
0 голосов
/ 12 марта 2019

Посмотрите на мою библиотеку ngx-RxCache. Я написал это именно для такого рода вещей.

https://medium.com/@adrianbrand/angular-state-management-with-rxcache-468a865fc3fb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...