如何在可观察的Typescript中提供默认值功能

时间:2018-11-09 14:59:52

标签: typescript observable

我试图了解当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 {};)

1 个答案:

答案 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