如何创建指向不同可观察量的链接管道



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

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 被称为 fine 并返回结果。然后console.log("1") ,也发送了/data的请求,但现在console.log("2")出现。

我缺少的是"内部"console.log(response)的输出。

我做错了什么?

要从内部可观察量获取响应,您可能需要尝试使用 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(...)的响应

该服务如下所示:

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

相关内容

  • 没有找到相关文章

最新更新