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

时间:2018-03-02 11:28:23

标签: javascript typescript ionic2 angularfire

  

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

可能是上次导致此问题的限制。 有任何帮助来解决这个问题吗?

感谢。

1 个答案:

答案 0 :(得分: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