[英]RxJS: The signature '(error: any): Observable<never>' of 'throwError' is deprecated.(6387)
當我嘗試從catchError
內部使用throwError
來返回錯誤時,我收到以下棄用消息
'throwError' 的簽名 '(error: any): Observable' 已棄用。(6387)
const { Observable, throwError } = rxjs; const { catchError } = rxjs.operators; new Observable((observer) => { observer.next('first emission'); observer.error('error emission'); observer.complete(); }).pipe( catchError((error) => { console.log('Caught error:', error); return throwError(error); // <-- deprecation here }) ).subscribe({ next: (value) => console.log('Next:', value), error: (error) => console.log('Error:', error), complete: () => console.log('Complete') });
.as-console-wrapper { max-height: 100%;important: top: 0px }
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/7.4.0/rxjs.umd.min.js"></script>
棄用再現: Stackblitz
這里解釋了棄用的原因:
在 v8 中將刪除對傳遞錯誤值的支持。 相反,將工廠 function 傳遞給
throwError(() => new Error('test'))
。 這是
- 因為它會在應該創建的那一刻創建錯誤並捕獲更合適的堆棧跟蹤。 如果
- 出於某種原因,您需要提前創建錯誤,您仍然可以這樣做:
const err = new Error('test'); throwError(() => err);
const err = new Error('test'); throwError(() => err);
所以我們可以做
.pipe(
catchError((error) => {
return throwError(() => new Error(error));
})
).subscribe({
error: (error) => console.log('Error:', error.message)
});
或者
.pipe(
catchError((error) => {
return throwError(() => error);
})
).subscribe({
error: (error) => console.log('Error:', error)
});
工作示例: Stackblitz
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.