【发布时间】:2019-03-12 09:47:48
【问题描述】:
我对 rxjs 有点陌生(我们已经被 angularJS 困了很长时间,终于摆脱了我们的技术债务)。
使用 angular7,我有一个这样的请求列表。使用 forkJoin,我这样管理它:
let requests = []
for (let asset in this.assets)
{
if(asset.enabled)
requests.push(this.apiService.postAsset(oAsset))
}
return forkJoin(requests)
而且效果很好,我收到了一系列回复。 然而我有点难以弄清楚如何根据资产类型获得不同的回调。 我想要类似的东西
private saveAssets(): Observable<any>{
let requests = []
for (let asset in this.assets)
{
//asset exists already
if(asset.id)
{
requests.push(this.apiService.putAsset(asset)
.subscribe(response => {
// do something with asset
}))
}
else
{
requests.push(this.apiService.postAsset(asset)
.subscribe(response => {
asset.id = response.id
// do some more thing with asset
}))
}
}
return forkJoin(requests)
//keep the forkjoin because I want to do something when everything is done
}
但这行不通。给出错误
ERROR TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
与调用执行请求的函数相关,如下所示(没有单个“订阅”,它工作正常):
this.saveAssets()
.subscribe(responses => {
console.log(responses)
})
任何帮助或提示,将不胜感激......我将分配更多时间学习 RxJS,但现在我只是想让这个小东西在不太 -肮脏的方式。
非常感谢!
【问题讨论】:
-
我正在查看语法,但这里没有发现问题。您确定没有任何请求出错吗?
-
嗨@jriver27,谢谢!是的,每个调用都由 api 正确执行。
标签: angular typescript rxjs fork-join