Angular 组合两个观察值,然后变换结果
我有一个REST端点,我正在使用Http调用它。 我需要链接两个调用,然后使用每个调用的结果创建一个要返回的对象 伪代码:Angular 组合两个观察值,然后变换结果,angular,http,rxjs,flatmap,Angular,Http,Rxjs,Flatmap,我有一个REST端点,我正在使用Http调用它。 我需要链接两个调用,然后使用每个调用的结果创建一个要返回的对象 伪代码: 将新实体发布到服务器并获取UID 使用返回的UID将实体内容修补到服务器 创建一个结合实体内容和UID的对象 将对象返回给调用方(订阅) 我以为这样就可以了,但我犯了一个错误 addClient(clientData) { let clientUid; return this.http.post(`/clients`, clientData) .f
- 将新实体发布到服务器并获取UID
- 使用返回的UID将实体内容修补到服务器
- 创建一个结合实体内容和UID的对象
- 将对象返回给调用方(订阅)
addClient(clientData) {
let clientUid;
return this.http.post(`/clients`, clientData)
.flatMap((newClient:any) => {
clientUid = newClient.name;
return this.http.patch(`/spec/${clientUid}`, clientData)
.flatMap((updatedClient:any)=> {
return {
uid: clientUid,
...updatedClient,
}
})
});
}
//consume
this.clientService.addClient(clientData)
.subscribe((response:any) =>{ }
TypeError:您提供了一个无效的对象,其中应该有一个流。您可以提供一个可观察的、承诺的、数组的或可观察的
我怎样才能:
- 修复错误并让addClient返回我想要的对象
- 还有,有没有一种方法可以在最终平面图中使用UID,而不必设置局部变量(clientUid)
- 函数
.flatMap
希望您返回一个可观察的
,但实际上您返回的是一个对象
如果要转换值,则应使用.map
关于使用
clientUuid
,由于您的map
是从原始flatMap
中调用的,您应该能够使用newClient.name
您的代码中有一些错误和改进
flatmap
调用flatmap
。您需要的是map
我已经为您的问题创建了一个演示-。
flatMap
希望您返回一个可观察的。但是你返回了一个对象。相反,你应该用.map
来表示这个bitDoh!实际上,我是从地图开始的,但后来改为解决另一个问题。把它改回去确实有效。谢谢。@user184994如果您添加答案,我会将其标记为已接受。如果你对第二点有任何想法,那也会很有帮助。