gpt4 book ai didi

javascript - 多个 RxJS AJAX 请求

转载 作者:行者123 更新时间:2023-11-28 18:10:11 24 4
gpt4 key购买 nike

我正在使用 rxjs 发出多个 http 请求,我希望最终得到一个如下所示的对象:

{
100: {
...response from api call...
},
205: {
...response from api call...
},
...etc...
}

这是我到目前为止所拥有的:

const projectIds = [100, 205, 208, 300]
const source = Rx.Observable
.from(projectIds)
.flatMap(id => get(`projects/${id}/builds`))
.map(response => response['data'])
.zip(projectIds)
.toArray()

source.subscribe(pipelines => {
console.log(pipelines)
})

这会返回一个数组,其中第一个元素是调用的响应,第二个元素是项目的 id。

问题是响应与项目 ID 不匹配,因为响应以不同的顺序返回,具体取决于哪个请求首先完成。

如何保留顺序(或者至少知道每个响应对应哪个projectId),同时最后还得到一个对象(当前是一个数组)?

最佳答案

选项 1

您可以使用 concatMap 代替 flatMap ,这应该保留顺序。

注意:如果您正在寻找的话,这不会发出任何并发请求。

<小时/>

选项 2

如果您想发出并发请求(至少从 RxJS 端,根据浏览器,这可能仍然受到限制),您可以使用 forkJoin 来使用一些构造,如下所示:

const projectIds = [100, 205, 208, 300]
const source = Rx.Observable
.from(projectIds)
.map(id => get(`projects/${id}/builds`).pluck('data'))
.toArray()
.switchMap(requestArray => Rx.Observable.forkJoin(requestArray))
.zip(projectIds)


source.subscribe(pipelines => {
console.log(pipelines)
})

关于javascript - 多个 RxJS AJAX 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41793042/

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