Angular 5 尝试订阅时无法读取未定义的 属性 'subscribe',这不是一种服务方法

Angular 5 Cannot read property 'subscribe' of undefined when am trying to subscribe which is not a type of Service Method

我有一个方法,

validatingUpdateBtn: boolean;

Validating(): Observable<boolean> {

    //Do some function

    if (this.validatingUpdateBtn) {
         return Observable.of(true).map(res => res);
    }
    else {
         return Observable.of(false).map(res => res);
    }
}

现在如下方法所示,我订阅了上面的方法。

handleSelection(){
    this.Validating().subscribe(
          (res) => {
            if (res) {
              //Do some work
            }else{
              //Do some work
            }
          }
        )
}

但是我在尝试订阅 Validating() 时收到 Cannot read 属性 'subscribe' of undefined方法。

我没弄错是怎么回事?

validatingUpdateBtn:布尔值;

ValidatingFunction = () => {

    //Do some function

    if (this.validatingUpdateBtn) {
         return Observable.of(true).map(res => res);
    }
    else {
         return Observable.of(false).map(res => res);
    }
}

Validating = ValidatingFunction.asObservable();

试试这个也许有用

你没有什么可以 map 因此删除 of 之后的 map 运算符。使用 rxjs/observable/of 中的 of 运算符,如下所示。

import { Observable, of } from 'rxjs';

  Validating(): Observable<any> {

    let res = this.validatingUpdateBtn ?  of(true) : of(false);
    return res;
  }

handleSelection(): void{

  this.Validating().subscribe( res => {
    if (res) {
      console.log(res);
    } else {
      console.log(res);
    }
  });
}

StackBlitz

正如我们通过 @Chandan Y S 发现的那样,问题在于当前的 if 语句在另一个条件结构中,在本例中为 switch语句,在某些特定场景中,执行甚至没有到达 returning observables 的 if-else 语句,这就是为什么函数没有 return 任何东西的原因。