Как создать цепные трубы для разных наблюдаемых? - PullRequest
0 голосов
/ 01 февраля 2019

Мне интересно, как можно вызвать и обработать две разные наблюдаемые, как это:

return this.restService.update('/events/' + data.ID, dbObj)
       .pipe(
        tap((response:any) => {
            console.error("1")
            this.restService.get('/data/' + userID + '/' + eventID)
                .pipe(
                    tap(response => console.log(response))
                );
            console.error("2")
        }))

this.restService - это просто оболочка для http, и она работает.Что происходит, так это то, что events вызывается нормально и возвращает результат.Затем console.log("1"), также отправляется запрос к /data, но теперь появляется console.log("2").

Чего мне не хватает, так это вывода "внутреннего" console.log(response).

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Сервис выглядит так:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class RestService {
    constructor(private http: HttpClient) { }
    baseURL:string = 'http://wscm.localhost/rest';

    get(path: any): any {
        return this.http.get<any[]>(this.baseURL + path);
    }

    post(path: any, data: any): any {
        return this.http.post<any[]>(this.baseURL + path, data);
    }

    update(path: any, data: any): any {
        return this.http.put<any[]>(this.baseURL + path, data);
    }

    delete(path: any): any {
        return this.http.delete<any[]>(this.baseURL + path);
    }
}
0 голосов
/ 01 февраля 2019

Чтобы получить ответ от внутренней наблюдаемой, вы можете попробовать оператор switchMap, чтобы возвращаемая вещь была примерно такой:

return this.restService.update('/events/' + data.ID, dbObj)
       .pipe(
        switchMap((response:any) => {
            console.error("1")
            return this.restService.get('/data/' + userID + '/' + eventID)
                .pipe(
                    tap(response => console.log(response))
                );
            console.error("2")
        }))

Таким образом, после того, как первое наблюдаемое this.restService.update(..) возвращает значение, оно вызовет оператор switchMap, который заменит поток this.restService.update на новый, который являетсяответ this.restService.get(...)

...