我试图发出多个HTTP请求以响应单击“全部更新”按钮。我的代码如下所示:
let new_items:Observable<ApiResponse<ShoppingListItem>>[] = this.items
.map(item => new ShoppingListItem(...))
.map(item => this.shoppingListService.updateItem(item));
concat(new_items).subscribe(
r => console.log(r);
);
this.shoppingListService.updateItem
返回通过调用生成的Observable httpClient.put
。
运行此代码时,我希望看到的console.log(r)
是由该updateItem
方法生成的类型所打印的值。相反,这是一个可观察的。我的服务器日志表明没有发出HTTP请求。这似乎表明它尚未订阅。我对concat
文档的理解是,concat
在Observable完成之前,将传递给每个传递给Observable的个体。
如果我更换concat
与forkJoin
我得到的结果,我期待。我并不特别在意订单,因此我可以很好地使用它,forkJoin
但是我想了解为什么使用concat
不起作用。
您所看到的有些混乱,但这是concat()
and的预期行为forkJoin()
。
forkJoin()
将Observables数组和扩展的Observables都用作单独的参数:
forkJoin(obs1, obs2, obs3)
// or
forkJoin([obs1, obs2, obs3])
但是concat
不同。它仅期望将源Observables(或ObservableInput)作为单个参数,如下所示:
concat(obs1, obs2, obs3)
但是,如果传递像concat([obs1, obs2, obs3])
这样的数组,则它将该数组作为ObservableInput并仅迭代其项,这不是您想要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句