gpt4 book ai didi

angular - 为什么在 Angular 中连接多个 HttpClient 调用时,concat RxJS 运算符会发出 Observables 而不是值

转载 作者:行者123 更新时间:2023-12-05 02:03:07 26 4
gpt4 key购买 nike

我正在尝试发出多个 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 返回通过调用 httpClient.put 生成的 Observable。

运行此代码时,我希望看到 console.log(r) 打印的值属于 updateItem 方法生成的类型。相反,它是一个 Observable。我的服务器日志表明没有发出 HTTP 请求。这似乎表明它没有被订阅。我对 concat 文档的理解是,传递给 concat 的每个单独的 Observable 将在 Observable 完成之前按顺序订阅。

如果我将 concat 替换为 forkJoin,我会得到预期的结果。我不是特别在意顺序,所以我可以使用 forkJoin 但我想了解为什么使用 concat 不起作用。

最佳答案

您看到的有点令人困惑,但这是 concat()forkJoin() 的预期行为。

forkJoin() 使用 Observable 数组和扩展的 Observable 作为单独的参数:

forkJoin(obs1, obs2, obs3)
// or
forkJoin([obs1, obs2, obs3])

但是 concat 就不同了。它只期望源 Observables(或 ObservableInput)作为单独的参数,如下所示:

concat(obs1, obs2, obs3)

但是如果你传递一个像 concat([obs1, obs2, obs3]) 这样的数组,它会将数组作为一个 ObservableInput 并只迭代它的项目,这不是你想要的。

关于angular - 为什么在 Angular 中连接多个 HttpClient 调用时,concat RxJS 运算符会发出 Observables 而不是值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65431741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com