簡體   English   中英

RxJS:簽名'(錯誤:任何):可觀察到<never> 'throwError' 已棄用。(6387)</never>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM