gpt4 book ai didi

javascript - RxJs:顺序发送请求并不是真正顺序的

转载 作者:行者123 更新时间:2023-12-01 01:43:40 25 4
gpt4 key购买 nike

我需要按顺序发送一组相同的请求:仅当前一个请求完成时才应发送下一个请求(即我收到响应)。我有以下代码...

Observable.of(ids)
.pipe(
concatMap(ids => ids.map(id => this.doRequest(id)))
)
.subscribe((res) => {
//one more request here
})

下一个请求不会等待上一个请求完成。此外,当我在订阅中再执行一个请求时,会发送 N 个请求(其中 N 等于 ids.length),而不是一个请求。

有人可以向我解释一下这里发生了什么以及如何解决这个问题吗?

提前谢谢您!

UPD。 看来需要提供有关我正在尝试执行的操作的更多详细信息。遵循 @martin 回答后,代码如下所示

let obj = {ids: [1, 2, 3]};

return Observable.of(obj)
.filter((tube: ResultTube) => {
return (
obj != null &&
obj.ids &&
obj.ids.length > 0
);
})
.switchMap(obj => {
return Observable.from(obj.ids);
})
.pipe(
concatMap(id => this.approveLaboratory(id))
)
.map((res) => {
debugger; //fired N times after subscribe() !
return obj
})

最佳答案

如果您希望 concatMap 等待,您需要处理单个发射并让它一一处理它们。您现在所拥有的将 ids 作为数组推送到 concatMap 中,然后创建一个 Observables 数组。相反,您可以在 concatMap 之前将 ids 解压为单独的排放:

Observable.from(ids)
.pipe(
concatMap(id => this.doRequest(id))
)
.subscribe((res) => {
//one more request here
})

...或者像这样:

Observable.of(ids)
.pipe(
concatAll(), // unpack array of ids
concatMap(id => this.doRequest(id))
)
.subscribe((res) => {
//one more request here
})

关于javascript - RxJs:顺序发送请求并不是真正顺序的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52144932/

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