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

问题描述 投票:0回答:1

我需要一种方法来等待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

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

谢谢。

javascript typescript ionic2 angularfire
1个回答
0
投票

假设您的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

© www.soinside.com 2019 - 2024. All rights reserved.