如何等待操作直到使用RXJS完成工作?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何等待操作直到使用RXJS完成工作?相关的知识,希望对你有一定的参考价值。

我需要一种方法来等待RXJS完成他的工作。

这是我的功能:

      getLastOrderBeta() {
        return this.db.list(`Ring/${localStorage.getItem('localstorage')}`, {
            query: {
              equalTo: false,
              orderByChild: 'status',
              limitToLast: 2,
            }
          })
          .map((orders: any) => {
            return orders.map((order: any) => {
              order.userInfo = this.getProfile(order.userid);
              return order;
            });
          }).do((s:any)=>{
            console.log(s);
            console.log(here);
           }); 
      }

当我有一个项目时,日志是正常的:

enter image description here

当我有两个项目相同的日志是正常的:

enter image description here

但是当我有三个项目时,日志会重复:

enter image description here

也许是最后导致这个问题的限制。有什么帮助解决这个问题?

谢谢。

答案

假设您的getLastOrderBeta方法返回Observable,您可以使用Promise将其转换为toPromise

const valueAsPromise = getLastOrderBeta().toPromise()

如果你的Promise扔到任何地方并且用最后一次发射值解析,这个Observable将拒绝。

valueAsPromise
  .then((value) => {
     // last value from your observable
  })
  .catch((error) => {
     // something bad happened
  })

如果您需要等待多个发射值,那么您可以先调用toArray

const valuesAsPromise = getLastOrderBeta().toArray().toPromise()

这将导致Promise与所有发出的值一起解析。

如果您需要自定义逻辑来聚合发射的值,请使用reduce

以上是关于如何等待操作直到使用RXJS完成工作?的主要内容,如果未能解决你的问题,请参考以下文章

在 foreach 中等待几个可观察的 rxjs 直到完成执行另一个

RxJS 等待订阅 Observable 完成

如何在 RxJS 订阅方法中等待

在执行下一个代码块之前等待多个 RxJS 调用

线程-使用CountDownEvent类

如何在订阅前等待 Observable 完成