我有一种情况,我正在做一个帖子,它也给了我一个json对象。
仅在帖子中使用URL和正文时,返回类型为Observable<T>
但是同时使用params时,返回类型变为Observable<HttpEvent<T>>
这是一个简单的例子...
要发布的信息
let someInfo: SomeInfo = new SomeInfo("abc", "xyz");
发布后期望的返回类型是MwUser。
不带参数的常规帖子
this.httpclient.post<MwUser>(apiUrl, someInfo).subscribe(
res => {
console.log(res);
},
error => {
console.log(error);
}
);
res是MwUser
现在使用params做相同的帖子
const paramToPass: any = new HttpParams().set('groupType', 'xyz');
this.httpclient.post<MwUser>(apiUrl, someInfo, paramToPass).subscribe(
res => {
user = res;
console.log(res);
},
error => {
console.log(error);
}
);
此处res不是MwUser
如何处理第二种情况(上述),将res更改为MwUser并仍然传递参数?
旁注:当我们将参数传递给get时,返回类型为Observable<T>
。
答案 0 :(得分:1)
将observe : 'body';
添加到第三个参数httpOptions
(在您的情况下为paramToPass
)中,期望返回类型为Observable<T>
。您可以查看官方文档以查看http.post
let paramToPass = {};
paramToPass['params'] = new HttpParams().set('groupType', 'xyz');
paramToPass['observe'] = 'body';
this.httpclient.post<MwUser>(apiUrl, someInfo, paramToPass).subscribe(
res => {
user = res;
console.log(res);
},
error => {
console.log(error);
}
);
答案 1 :(得分:0)
您需要将HttEvent映射到MwUser,这里有一些示例:https://angular.io/guide/http。
寻找.pipe(