RxJS 中的 catchError 和 onErrorResumeNext 处理异常情况

RxJS 是一种流式编程库,可以轻松地处理异步和基于事件的程序。RxJS 包含很多常见的流操作符,包括 catchError 和 onErrorResumeNext,用于处理异常情况。在本文中,我们将详细介绍这两个操作符的用途和实际应用。

catchError 操作符

catchError 操作符用于捕获 Observable 序列中的错误。如果 Observable 发出错误,则 catchError 将执行一个回调函数以处理错误,并返回一个新的 Observable,该 Observable 发出新的值,而不是错误。如果您不使用 catchError,Observable 可能会停止发出值,并抛出错误。

下面是 catchError 操作符的语法:

catchError(project: function): Observable
  • project:指定一个函数,在出现错误时执行并返回一个新的 Observable 序列。

下面是一个使用 catchError 的示例:

import { catchError } from 'rxjs/operators';
import { of } from 'rxjs';

of(1, 2, 3).pipe(
  map((n) => {
    if (n === 2) {
      throw new Error('Number 2 is not allowed');
    }
    return n;
  }),
  catchError((err) => of('Error caught:', err.message))
).subscribe(console.log);

在上面的示例中,我们使用 of 创建一个 Observable,然后使用 map 操作符将值映射为新值。当映射到值为 2 时,我们抛出一个错误。然后,我们使用 catchError 操作符捕获错误并返回一个新的 Observable,该 Observable 发出错误信息字符串。

输出:

onErrorResumeNext 操作符

onErrorResumeNext 操作符可以帮助我们在 Observable 中遇到错误时提供备用的 Observable,以继续发出值。如果在订阅 Observable 期间遇到错误,则 onErrorResumeNext 将跳过错误的 Observable,并开始发出备用 Observable 中的值。

下面是 onErrorResumeNext 操作符的语法:

onErrorResumeNext(next: Observable): Observable
  • next:指定一个备选的 Observable,用于在遇到错误时继续发出值。

下面是一个使用 onErrorResumeNext 的示例:

import { onErrorResumeNext, of } from 'rxjs';

of(1, 2, 3).pipe(
  map((n) => {
    if (n === 2) {
      throw new Error('Number 2 is not allowed');
    }
    return n;
  }),
  onErrorResumeNext(of(4, 5, 6))
).subscribe(console.log);

在上面的示例中,当我们映射值为 2 时,我们抛出一个错误。然后,我们使用 onErrorResumeNext 操作符跳过错误的 Observable 并继续使用备选 Observable,该 Observable 发出值 4、5 和 6。

输出:

总结

在 RxJS 中,如果我们不处理错误,Observable 可能会停止发出值并抛出错误。catchError 和 onErrorResumeNext 操作符可以帮助我们处理错误,从而保留 Observable 的流。

catchError 操作符可以用于捕获错误并返回一个新的 Observable,该 Observable 发出备选值而不抛出错误。onErrorResumeNext 操作符可以用于跳过错误的 Observable 并继续使用备选 Observable,该 Observable 发出备选值而不抛出错误。

在实际应用中,我们应该总是处理错误并保留 Observable 的流,这可以帮助我们更好地处理异步和基于事件的程序。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65ab95bfadd4f0e0ff53d38e