如何创建到不同可观察对象的链管?

时间:2019-02-01 08:00:37

标签: angular rxjs pipe observable

我想知道如何调用和处理这样两个不同的可观察对象:

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 :(得分:2)

要获得内部可观察到的响应,您可能需要尝试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运算符,该运算符将用新的{{11 }}

答案 1 :(得分:-1)

服务如下:

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);
    }
}