flatMap не работает как ожидаемая цепочка звонков - PullRequest
0 голосов
/ 06 июля 2019

Проблема организации цепочки вызовов с использованием наблюдаемых rxjs с машинописью

Я новичок в RXJS, и у меня возникли проблемы с организацией цепочки вызовов в моем машинописном коде. Вопрос - как сделать this.http.get ('http://www.gooogle.com'); звонит только один раз. Этот код не является реальным, просто минимальный случай для воспроизведения

import {Injectable} from '@angular/core';
import {flatMap, map} from 'rxjs/operators';
import {Observable, from} from 'rxjs';
import {HttpClient} from '@angular/common/http';

@Injectable()
export class CoolService {

  constructor(private http: HttpClient) {}
  x(): Observable<Object> {
    return from(Promise.resolve({a: {b: 'c'}})).pipe(
      flatMap((x) => {
        console.log(x);
        return this.http.get('http://www.gooogle.com');
      }), map((res) => {
        console.log(res);
        return res;
      }));
  }
}


1 Ответ

0 голосов
/ 07 июля 2019

Причиной было мое непонимание того, как работают операторы rxjs.Все операторы делают работу для каждой подписки, но я подумал, что она делает один расчет для всех подписок.Из-за этого я выполнил цепочку вызовов в сервисе и подписался на ответ в другом месте - в качестве причины операторы запускают столько же, сколько подписок в коде, поэтому мне нужно перестроить этот

...