gpt4 book ai didi

javascript - 使用 RxJS 的 switchMap 限制请求

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

我正在寻找一种方法来利用 RxJS 5 来处理在任意时间触发的请求并仅发出最新结果。

我正在尝试使用 SubjectswitchMap 来解决这个问题。理想情况下,我想观察字符串值(url)并发出响应。如果在收到任何先前的响应之前观察到新的 url,则应该将其忘记(或取消 - 我相信这个实际上是在 switchMap 中实现的)。

我已成功生成以下代码:

const stream$ = new Rx.Subject()
.switchMap(url => Rx.Observable.fromPromise(
fetch(url).then(res => res.json())
))
.subscribe(res => console.log(res));

stream$.next('https://some-api-server.com/1');
stream$.next('https://some-api-server.com/2');
stream$.next('https://some-api-server.com/3');

根据我对 switchMap 的理解,控制台输出应该只显示上次请求的结果。相反,它显示了我传递给 stream$ 的 url。我哪里错了?

最佳答案

您的代码可以重写如下:

const subject = new Rx.Subject();
const stream$ = subject
.switchMap(url => Rx.Observable.fromPromise(
fetch(url).then(res => res.json())
));


const subscription = stream$.subscribe(res => console.log(res));

subscription.next('https://some-api-server.com/1');
subscription.next('https://some-api-server.com/2');
subscription.next('https://some-api-server.com/3');

而且,如您所见,您正在将 url 推送到订阅中,而不是推送到主题中……不确定为什么它有 next 方法,也许是实现细节。

要使其正常工作 - 将 url 推送到 subject 变量

关于javascript - 使用 RxJS 的 switchMap 限制请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51992832/

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