【问题标题】:rxjs 'merge' operator not working with toPromise()?rxjs 'merge' 运算符不能与 toPromise() 一起使用?
【发布时间】:2021-04-01 21:10:20
【问题描述】:

我有以下代码:

const observable_one = this.loadFromStorage(key)   //fast!
const observable_two = this.http.myRequest()       //slow!

my_observable = 
    merge(
      observable_one,
      oobservable_two
    )

现在,当我执行以下操作时,它只会在慢速第二个完成后才提供数据

const data = await my_observable.toPromise()

同时

my_observable.subscribe(data  => {
    //work with data
})

如预期的那样发射两次。

如何解释? toPromise() 怎么知道有事要发生?

出于某些原因,我更喜欢 await / toPromise() 方法。

【问题讨论】:

    标签: promise rxjs


    【解决方案1】:

    你可以使用combineLatest

    combineLatest(observable_one,oobservable_two).subscribe(data  => {
        //work with data
    })
    

    【讨论】:

    • 但这需要两个可观察对象都先发出数据,对吧?
    • 是的,你是对的!通过这种方式,您可以同步来自两个来源的数据,然后对其执行任何任务。我会说不要使用toPromise。因为如果你移动到其他屏幕,它是不可取消的,而且它本质上是渴望的。另一方面,observable 的行为就像在您订阅之前从未调用过的惰性并且可以随时取消。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2020-10-21
    • 2019-12-29
    • 2012-09-11
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    相关资源
    最近更新 更多