类型'boolean'不能赋值为'Observable <boolean>'

时间:2017-02-11 16:37:42

标签: angular observable

我有那段代码

method(): Observable<boolean> {
    return this._http.get('sessionId=' + sessionId).map(res=> {
      if (res.status === "success") {
        return true;
      }
      return false;
    });
}

但是当sessionId是''它会抛出异常并且控制台记录401错误

我在该方法中添加if:

method(): Observable<boolean> {
    if (sessionId === '')
      return false;
    return this._http.get('sessionId=' + sessionId).map(res=> {
      if (res.status === "success") {
        return true;
      }
      return false;
    });
  }

但现在我收到了一个错误:

  

类型'boolean'不能分配给'Observable'类型。

我该如何解决?

如果我添加Observable<boolean> | boolean,那么我会收到错误

  

属性'map'在类型'boolean |上不存在可观察到的”。

3 个答案:

答案 0 :(得分:23)

method(): Observable<boolean> {
    if (sessionId === '')
      return false; // <<< obviously not an observable

这应该做你想要的事情

method(): Observable<boolean> {
    if (sessionId === '')
      return Observable.of(false);
    }
    return this._http.get('sessionId=' + sessionId).map(res=> {
      if (res.status === "success") {
        return true;
      }
      return false;
    });
  }

答案 1 :(得分:4)

除了接受的答案,我还会添加RxJs v6案例of Observable不存在,但可以直接从rxjs导入:

import { Observable, of as observableOf } from 'rxjs'; // since RxJs 6

method(): Observable<boolean> {
  if (sessionId === '')
    return observableOf(false);
  }
  // ...
}

答案 2 :(得分:-1)

检查方法:

import 'rxjs/add/observable/of';
Observable.of();

您可以从字段创建Observable并使用以下内容解决问题:

method(): Observable<boolean> {
    if (sessionId === '')
      return Observable.of(false); // Now we got an Observable instance
    return this._http.get('sessionId=' + sessionId).map(res=> {
      if (res.status === "success") {
        return true;
      }
      return false;
    });
  }

文档:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-of