【发布时间】:2019-01-25 20:29:01
【问题描述】:
我有一个使用 Angular Http 调用的 REST 端点。 我需要链接两个调用,然后使用每个调用的结果来创建一个要返回的对象。
伪代码:
- 将新实体发布到服务器并取回 UID
- PATCH 实体内容到服务器,使用返回的 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:您在预期流的位置提供了无效对象。您可以提供 Observable、Promise、Array 或 Iterable。
我该怎么做:
- 修复错误并让 addClient 返回我想要的对象?
- 另外,有没有一种方法可以在最终的 flatMap 中使用 UID 而无需设置局部变量 (clientUid)?
【问题讨论】:
-
flatMap应该返回一个 Observable。但你正在返回一个对象。相反,您应该使用.map来表示该位 -
噢!我实际上是从那里的地图开始的,但为了解决另一个问题而改变了。改回来确实有效。谢谢。
-
@user184994 如果您添加答案,我会将其标记为已接受。如果您对第 2 点有任何想法,那也是最有帮助的。