如何等待操作直到使用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);
});
}
当我有一个项目时,日志是正常的:
当我有两个项目相同的日志是正常的:
但是当我有三个项目时,日志会重复:
也许是最后导致这个问题的限制。有什么帮助解决这个问题?
谢谢。
答案
假设您的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完成工作?的主要内容,如果未能解决你的问题,请参考以下文章