我试图了解当observable
的元素之一进入TS
块时,如何在stream
的{{1}}中提供默认值:
catch
在上面的示例中,我知道您getClient(id:number):Observable<User>{
let route=UserService.baseUrl+"/user/${id}";
var data= this.http.get(route)
.map(resp=>resp)
.catch((err,o)=> {console.log(error);return {};}) as Observable<User>;
return data;
}
还是可以提供throw
值,如果在default
块中未能检索到元素。
为什么会出现此错误:
catch
PS 我尝试了所有组合以使Argument of type '(err: any, o: Observable<Object>) => {}' is not assignable to parameter of type '(err: any, caught: Observable<Object>) => ObservableInput<{}>'.
Type '{}' is not assignable to type 'ObservableInput<{}>'.
Type '{}' is not assignable to type 'Iterable<{}>'.
Property '[Symbol.iterator]' is missing in type '{}'
得以编译:
.catch(lambda)
.catch((err,o)=> return {};)
答案 0 :(得分:1)
您可以像下面这样在catchBlock上返回一个新的Observable
var data = this.http.get(route).pipe(
map(resp=>resp), catchError(this.handleError))
private handleError(error: HttpErrorResponse) {
console.log(error)
return new Observable(observer => {
observer.next({status:"Error" });
});
// return Observable.throw("Authentication Failed " + error.statusText);
}
示例演示
https://stackblitz.com/edit/typescript-catch-error-return?file=index.ts