如何从订阅另一个函数的可观察对象的函数中 return 布尔值?

How to return boolean value from a function that subscribes to an observable of another function?

我遇到了这个问题,我有一个具有布尔函数 validateProductsBeforeChangesProductService

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 {
       ...
     }
})