在后台使用角度6的多个http请求

时间:2018-09-20 00:02:33

标签: angular http rxjs

我必须分批提取数据,以完成前端已经拥有的数据, 因此,可以说我有数百个ID,名称和其他字段为空的对象,因为我必须通过传递ID从另一个端点获取它们,但是,这个另一个端点非常慢,我需要执行以下操作让我们在后台说5,“不要中断任何其他请求”。

做到这一点的最佳方法是什么?并将获取的数据附加到对象列表中的相应项?

2 个答案:

答案 0 :(得分:1)

您可以像这样使用mergeMap

  this.http.get('/api1').pipe(
      mergeMap(character => this.http.get('/api2'))
    ).subscribe(() => {
       ....  
    });

参考  -Angular Multiple HTTP Requests with RxJS

答案 1 :(得分:1)

如果我理解正确,您将从知道idname的对象数组开始。您需要用其他数据填充所有这些对象,您可以使用慢速API来获取这些数据,因此您不希望一次发送超过5个这样的请求。

让我们假定通过方法getDataForId(id)来实现对此类API的调用,并使用方法populate(obj, data)来对对象填充从API中获取的其他数据,其中{{1 }}是必须填充的对象,obj是用于填充对象的原始数据。

如果可以的话,您可以考虑采用以下方法

data

替代实施-评论后

您还可以考虑从后端获取列表,然后以5个为块的方式获取具有完整详细信息的项目。您可以使用如下代码来实现此目的

const objArray = [
  {id: 123, name: 'first'},
  {id: 456, name: 'second'},
  ......
  {id: xyz, name: 'last'},
];

    from(objArray).pipe(
       mergeMap(
          obj => getDataForId(objArray.id).pipe(
             map(data => populate(obj, data))
          ), 5
       )
    )
    .subscribe()