gpt4 book ai didi

javascript - 有没有一种方法可以独立处理为多个可观察对象发出的值,然后在所有可观察对象完成后做一些事情?

转载 作者:太空狗 更新时间:2023-10-29 18:28:39 24 4
gpt4 key购买 nike

我正在使用 RXJS 方法,我想处理一个发出的值(当相应的 Observable 完成时),然后在代码的其他地方,跟踪同一个 Observable< 的状态(完成,错误,等待...)。

第一步是使用 forkJoin,它工作正常,但我必须等待所有 Observable 完成才能做事,如果我 订阅函数getStuff(x)Observable被“消耗”并且forkJoin将不再工作自然而然。

Observable1 = getStuff(a); // API which returns an observable
Observable2 = GetStuff(b); // API which returns an observable
Observable3 = Getstuff(c); // API which returns an observable
Observable.forkJoin([Observable1, Observable2, Observable3])
.subscribe(result => doStuff(result) )

我需要处理当每个 Observable 完成时独立发出的所有值,然后,当所有 Observable 完成时,做一些其他的东西。看起来像的东西:

getStuff(a).subscribe( x => doStuffwitha(x) );
getStuff(b).subscribe( x => doStuffwithb(x) );
getStuff(c).subscribe( x => doStuffwithc(x) );
Observable.forkJoin([getStuff(a), getStuff(b), getStuff(c)])
.subscribe( result => doStuff(result) )

我没有找到使用 async/awaitPromises 或 RXJS 方法的合适解决方案。

有没有一种方法可以在不添加新的“人为”Promise 或复杂的解决方法的情况下做到这一点,以保持代码的综合性和可读性?

最佳答案

每个订阅 block 中的下一个函数应该在以下情况下触发:

  • 1 发射
  • 2 发射
  • 3 发射
  • 全部完成

像这样:

Observable1 = getStuff(a); // API wich returns an observable
Observable2 = getStuff(b); // API wich returns an observable
Observable3 = getstuff(c); // API wich returns an observable
ObservableAll = Observable.forkJoin([Observable1, Observable2, Observable3])

Observable1.subscribe((xa) => { console.log('1', xa) })
Observable2.subscribe((xb) => { console.log('2', xb) })
Observable3.subscribe((xc) => { console.log('3', xc) })
ObservableAll.subscribe((xa, xb, xc) => { console.log('all', xa, xb, xc) })

这个 stackblitz 展示了我认为你正在努力实现的目标 https://stackblitz.com/edit/angular-df2gmv

关于javascript - 有没有一种方法可以独立处理为多个可观察对象发出的值,然后在所有可观察对象完成后做一些事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52822439/

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