我正在调用一个API方法(在表单提交过程中多次使用Angular的HttpClient
。(它在另一件事中添加了一些东西,我们的后端人员拒绝给我批添加方法)因此,我对用户输入的每个项目都调用一次。)代码是这样的(使用lodash进行数据按摩):
const items = ['foo', 'bar', 'baz', 'quux'];
const result$: Observable[] = _.map(items, it => httpClient.post('/items', it));
我尝试使用forkJoin
组合它们:
forkJoin(result$).subscribe(resp => ..., err => ...);
但是,这揭示了后端的某种错误,当我对多个项目执行此操作时会抛出该错误,但是如果我逐个添加它们则不会。 (我猜是种族状况。)
我尝试通过使用concat()来解决此问题,以使客户端一一处理请求:
concat(result$).subscribe(resp => ..., err => ...);
但是这会为每个可观察到的源触发一次订阅,我只想知道它们何时全部完成(或不完成)。我如何获得forkJoin的行为,除了不同时订阅源可观察项之外?
答案 0 :(得分:0)
您可以使用concatMap
concatMap:将值映射到内部可观察,订阅并发出 按顺序。
在您的情况下,forkJoin
同时进行所有订阅,但是concatMap
应该 一个一个 进行它们。
我希望这对您有用