Тип "boolean" не присваивается типу " Observable "

у меня есть этот код

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

но когда sessionId is " он выдает исключение и консоль регистрирует ошибку 401

и я добавляю, Если внутри этого метода:

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 / Observable'.

3 ответов


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;
    });
  }

в дополнение к принятому ответу я бы добавил случай RxJs v6, где of не существует Observable но может быть импортировано непосредственно из rxjs:

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

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

Проверьте метод:

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

Вы можете создавать наблюдаемые объекты из полей и решать свою проблему примерно так:

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