dc-*_*-p8 15 rxjs angular-http rxjs6
我写了一个可用的函数pipe:
HandleHttpBasicError<T>()
{
return ((source:Observable<T>) => {
return source.pipe(
catchError((err:any) => {
let msg = '';
if(err && err instanceof HttpErrorResponse)
{
if(err.status == 0)
msg += "The server didn't respond";
}
throw {
err,
msg
} as CustomError
})
)
})
}
Run Code Online (Sandbox Code Playgroud)
我可以在我的这个方式使用这个功能HttpService:
checkExist(id:string)
{
return this.http.head<void>(environment.apiUrl + 'some_url/' + id)
.pipe(
HandleHttpBasicError(),
catchError((err:CustomError) => {
if(err.msg)
throw err.msg;
if(err.err.status == HttpStatusCodes.NOT_FOUND)
throw("It doesn't exist.");
throw(err);
})
)
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好.当我订阅时checkExist(),我得到一个很好的错误消息,因为HandleHttpBasicError首先捕获一个错误并将catchError()其抛给服务,这会抛出错误消息,因为它不是null.
这样,它允许我拥有一个catchError()处理始终相同的错误消息的全局.在将来,我会在一个HttpHandler,但这不是重点.
可以用throw关键字链接错误吗?
我试图回来Observable.throwError(),但浏览器说
Observable.throwError不是函数
我的进口是import {Observable, of, throwError} from 'rxjs';.
这样做不是更好:
return ((source:Observable<T>) => {
return source.pipe(
catchError((err:any) => {
msg = '';
...
return of({err, msg} as CustomError)
/* instead of
throw(err)
-or-
return Observable.throwError(err) (which doesn't work)
*/
})
)
})
Run Code Online (Sandbox Code Playgroud)
?
Ing*_*ürk 29
是否可以使用throw关键字链接错误?
是的,这完全没问题.rxjs尝试捕获此类情况并将其转换为错误通知.
我试图返回Observable.throwError(),但浏览器说"Observable.throwError不是函数"
使用rxjs6,Observable原型不再被修改为包含运算符或这些"创建运算符",而是将它们作为独立函数公开.你可以在这里阅读更多关于它的内容,但它的要点是你只是return throwError(…),例如
return source$.pipe(
catchError(err => err.code === 404
? throwError("Not found")
: throwError(err)
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17264 次 |
| 最近记录: |