【问题标题】:Angular Concat Multiple HTTP RequestsAngular Concat 多个 HTTP 请求
【发布时间】:2020-11-24 03:28:49
【问题描述】:

我想使用 concat 来订阅我在数组中的所有 HTTP 请求。该数组中可能有 1 个或多个 http 请求。我目前正在像这样创建我的可观察数组:

requestArray.push(this.updateUser());
requestArray.push(this.updateCustomer());

然后我希望一次提交一个请求,所以我尝试像这样使用 concat:

concat(requestArray).subscribe(results => {
   console.log(results);
})

我会假设结果将是已完成请求的数组,但它只是打印出来:

Observable{_isScaler: false, source: Observable}
Observable{_isScaler: false, _subscribe: f}

看起来它实际上并没有订阅我的 observables。

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    concat(以及基本上任何其他接受可观察对象作为其参数的运算符)将纯 JavaScript 数组视为所谓的ObservableInput,它只是迭代其项目并将每个项目重新作为单独的排放。

    因此,如果您希望 concat 订阅数组中的项目,您必须将其解构为参数器:

    concat(...requestArray)
    

    【讨论】:

      【解决方案2】:

      如果您希望在所有调用完成后结果是一个数组,您可以这样做:

      concat(...requestArray).pipe(
        toArray()
      ).subscribe(console.log);
      

      这基本上是一样的:

      merge(...requestArray, 1).pipe(
        toArray()
      ).subscribe(console.log);
      

      与第二个不同的是,您可以明确决定您想要多少并发请求。因此,如果您希望一次并行运行几个而不会使服务器不堪重负,您可以这样做:

      最多 3 个并发请求:

      merge(...requestArray, 3).pipe(
        toArray()
      ).subscribe(console.log);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-26
        • 1970-01-01
        • 1970-01-01
        • 2014-05-30
        • 1970-01-01
        相关资源
        最近更新 更多