我想知道如何像这样调用和处理两个不同的可观察量:
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);
}
}