我想知道如何调用和处理这样两个不同的可观察对象:
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)
的输出。
我做错了什么?
答案 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);
}
}