gpt4 book ai didi

typescript - 链接 Observable 时的 RxJs 楼梯

转载 作者:搜寻专家 更新时间:2023-10-30 21:04:25 25 4
gpt4 key购买 nike

在我使用 Promise 和 Typescript 中的 async/await 语法之前,如下所示

const fooData = await AsyncFooData();
const barData = await AsyncBarData();

... do something with fooData and barData

如果我用 RxJs 做 Observable<T>对我来说它变成了这样

AsyncFooData().subscribe(fooData => {
AsyncBarData().subscribe(barData => {
... do something with fooData and barData
})
})

有没有更好的方法来做到这一点?因为它变得快速不可读,ala Staircase,如果我需要使用更多 AsyncData。

最佳答案

您将无法完成您使用 async/await 完成的操作,因为您仍然需要 .subscribe 回调并且有可能发出多个属性。您应该永远不要嵌套.subscribe 调用。通常,您将使用更高阶的 Observable 运算符,例如 mergeMap,或者使用同步多个 Observable 的发射的 Observable 创建器,例如 combineLatest:

combineLatest(AsyncFooData(), AsyncBarData()).subscribe([fooData, barData] => {

});

您需要的确切功能取决于您自己的需要以及 foobar 发出的方式:

  • combineLatest - 每次任何源发射时发射(注意:在所有源发射一次之前不会开始发射)。
  • zip - 同步发射,例如发射一次 每个 Observable 发射一次,然后发射两次,依此类推。
  • forkJoin - 当所有源可观察对象完成时发出
  • merge - 每当任何源发出时发出。它不像上面其他的那样组合输出。

还有更多可用的:https://www.learnrxjs.io/operators/combination/

关于typescript - 链接 Observable 时的 RxJs 楼梯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51065887/

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