如何从订阅另一个函数的observable的函数返回布尔值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从订阅另一个函数的observable的函数返回布尔值?相关的知识,希望对你有一定的参考价值。
我有这个问题,我有一个ProductService
有一个布尔函数validateProductsBeforeChanges
。
在validateProductsBeforeChanges
里面,我从另一个名为OrderService
的服务中调用一个函数,它返回一个observable。
一些示例代码:
validateProductsBeforeChanges(idProduct): Boolean {
this._orderService.getAll()
.subscribe(orders => {
this.orders = orders;
this.ordersWithCurrentMenu = this.orders.filter(x =>
x.products.find(y => y.code == idProduct));
if(this.ordersWithCurrentMenu.length > 0) {
return false;
}
else {
return true;
}
});
}
问题是vs代码抛出语法错误:
声明类型既不是'void'也不是'any'的函数必须返回一个值
所以我尝试做这样的事情:
validateProductsBeforeChanges(idProduct): Boolean {
this._orderService.getAll()
.subscribe(orders => {
this.orders = orders;
this.ordersWithCurrentMenu = this.orders.filter(x => x.products.find(y => y.code == idProduct));
if (this.ordersWithCurrentMenu.length > 0) {
return false;
}
else {
return true;
}
});
return false;
}
但是在这种情况下,最后一个返回在.subcribe
结束之前执行,并且函数总是返回false。
关于如何解决这个问题的任何想法?
非常感谢你!
答案
像这样的东西:
validateProductsBeforeChanges(idProduct): Observable<Boolean>{
return this._orderService.getAll()
.pipe(
map(orders =>
orders.filter(x => x.products.find(y => y.code == idProduct))
.map(filtered => filtered <= 0)
)
);
}
使用这样:
validateProductsBeforeChanges(id).subscribe(t=> {
if (t) {
...
}
else {
...
}
})
以上是关于如何从订阅另一个函数的observable的函数返回布尔值?的主要内容,如果未能解决你的问题,请参考以下文章
observable.observeOn() 和公共资源的并发问题
RXJS:向 Observable 添加一个函数以在订阅时执行(延迟)