如何从订阅另一个函数的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?

从异步函数返回 observable

observable.observeOn() 和公共资源的并发问题

RXJS:向 Observable 添加一个函数以在订阅时执行(延迟)

在哪里订阅 Angular 中的 observable、构造函数或 ngoninit [关闭]

如何从订阅内部函数中获取价值?离子 3