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