如何从订阅另一个函数的可观察函数的函数返回布尔值?

时间:2019-04-27 03:12:16

标签: angular typescript service angular5 observable

我遇到了这个问题,我有一个具有布尔函数ProductService的{​​{1}}。

validateProductsBeforeChanges内部,我从另一个称为validateProductsBeforeChanges的服务中调用了一个函数,该函数返回了一个可观察值。

一些示例代码:

OrderService

问题在于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;
               }
         });
}

但是在这种情况下,最后的返回要在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; } 结束之前执行,并且该函数始终返回false。

关于如何解决此问题的任何想法?

非常感谢您!

1 个答案:

答案 0 :(得分:1)

类似这样的东西:

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