我必须分批提取数据,以完成前端已经拥有的数据, 因此,可以说我有数百个ID,名称和其他字段为空的对象,因为我必须通过传递ID从另一个端点获取它们,但是,这个另一个端点非常慢,我需要执行以下操作让我们在后台说5,“不要中断任何其他请求”。
做到这一点的最佳方法是什么?并将获取的数据附加到对象列表中的相应项?
答案 0 :(得分:1)
您可以像这样使用mergeMap
this.http.get('/api1').pipe(
mergeMap(character => this.http.get('/api2'))
).subscribe(() => {
....
});
答案 1 :(得分:1)
如果我理解正确,您将从知道id
和name
的对象数组开始。您需要用其他数据填充所有这些对象,您可以使用慢速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()