rxjs:如何创建一个成功时为真、错误时为假的可观察对象

rxjs:如何创建一个成功时为真、错误时为假的可观察对象,rxjs,Rxjs,我想创建一个可观察对象,它订阅另一个可观察对象,并在成功时生成true,在错误时生成false 这是我的解决方案: new Observable ((observer: Observer<boolean>) => { obs().subscribe (() => { observer.next (true); }, error => { observer.next (false); }) }); 但这只会留下打字脚本错误: 错误TS23

我想创建一个可观察对象,它订阅另一个可观察对象,并在成功时生成true,在错误时生成false

这是我的解决方案:

new Observable ((observer: Observer<boolean>) => {
  obs().subscribe (() => {
    observer.next (true);
  }, error => {
    observer.next (false);
  })
});
但这只会留下打字脚本错误:

错误TS2322:类型“Observable”不可分配给类型“boolean | Observable”

类型“Observable”不可分配给类型“Observable”

类型“boolean |{}”不可分配给类型“boolean”

类型“{}”不可分配给类型“boolean”

我正在使用: rxjs 5.5.2
键入脚本2.4.2

您可以尝试捕获异常并返回false

obs().catch(()=> of(false))
     .map(value=>{
         if(!value){
             return false;
         }
         return true;
     );

如果该值不是truthy,则返回false,如果它是truthy,则返回一个新的可观察值true。

可能是导入的问题,现在可以这样做:

import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/catch';

obs ().map (() => true).catch (() => Observable.of (false));

好的,但如果它有效的话,它比我的第一个解决方案更加复杂和混乱。我不同意。此外,它还消除了订阅在您创建的新可观察对象中的情况,这可能会造成内存泄漏。您很可能能够删除开关映射,而只是使用映射。这可能会让事情变得更清楚。它与我的第二个例子相同,只是相反。但这在rxjs 5.5.2上不起作用。在这里,您必须使用管道和catchError。也许我打字有问题。
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/catch';

obs ().map (() => true).catch (() => Observable.of (false));