如何从订阅另一个函数的可观察对象的函数中 return 布尔值?
How to return boolean value from a function that subscribes to an observable of another function?
我遇到了这个问题,我有一个具有布尔函数 validateProductsBeforeChanges
的 ProductService
。
在 validateProductsBeforeChanges
中,我从另一个名为 OrderService
的服务中调用了一个函数,该服务 return 是一个可观察对象。
一些示例代码:
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 代码抛出语法错误:
A function whose declared type is neither 'void' nor 'any' must return a value
所以我尝试这样做:
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;
}
但在那种情况下,最后一个 return 在 .subcribe
结束之前执行,函数总是 returns 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 {
...
}
})
我遇到了这个问题,我有一个具有布尔函数 validateProductsBeforeChanges
的 ProductService
。
在 validateProductsBeforeChanges
中,我从另一个名为 OrderService
的服务中调用了一个函数,该服务 return 是一个可观察对象。
一些示例代码:
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 代码抛出语法错误:
A function whose declared type is neither 'void' nor 'any' must return a value
所以我尝试这样做:
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;
}
但在那种情况下,最后一个 return 在 .subcribe
结束之前执行,函数总是 returns 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 {
...
}
})