我想创建一个Observable,订阅另一个Observable并在成功时产生true,在出错时产生false。
这是我的解决方案:
new Observable ((observer: Observer<boolean>) => {
obs().subscribe (() => {
observer.next (true);
}, error => {
observer.next (false);
})
});
但我认为如果没有“新的Observable”,必须有一个更简单的解决方案。 类似的东西:
obs().pipe (
map (() => true),
catchError(() => of(false))
);
但这只会留下打字稿错误:
错误TS2322:类型'Observable'不能赋值为'boolean |可观察到的”。
类型'Observable'不能分配给Observable'。
输入'boolean | {}'不能赋值为'boolean'。
类型'{}'不能赋值为'boolean'。
我正在使用: rxjs 5.5.2 打字稿2.4.2
答案 0 :(得分:1)
可能这是导入的问题,现在可行:
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
obs ().map (() => true).catch (() => Observable.of (false));
答案 1 :(得分:0)
您可以尝试捕获异常并返回false
obs().catch(()=> of(false))
.map(value=>{
if(!value){
return false;
}
return true;
);
如果该值不是真值则返回false,如果它是真实的,则返回一个新的observable为真。