![](/img/trans.png)
[英]Angular 8 return Observable<boolean> from function
[英]How to return boolean value from a function that subscribes to an observable of another function?
我遇到了这个问题,我有一个具有布尔函数validateProductsBeforeChanges
的ProductService
。
在validateProductsBeforeChanges
内部,我从另一个名为OrderService
服务中调用一个函数,该函数返回一个可观察的对象。
一些示例代码:
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 {
...
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.