javascript - 当 Promise 被拒绝时如何触发 React 错误边界?

标签 javascript reactjs error-handling promise axios

我遇到的问题是,promise 中抛出的错误没有被错误边界组件捕获。

该代码从服务器获取数据并使用状态代码来确定如何处理来自响应的数据。 axios用作客户端,并设置拦截器来处理响应。

API.interceptors.response.use((response) => {
  switch (response.status) {
    case 500:
    case 403:
      throw new Promise((resolve) => resolve(response.status));
  }
});

我设置了ErrorBoundary组件捕获其子组件中引发的错误:

class ErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      hasError: false,
    };
  }

  componentDidCatch(error) {
    this.setState({
      hasError: true,
    });

    if (error instanceof Promise) {
      error.then(() => console.log(error));
    } else {
      console.log(error);
    }
  }

  render() {
    return this.state.hasError ? (
      <span>Something went wrong but it is okay</span>
    ) : (
      this.props.children
    );
  }
}

它被用作:

<ErrorBoundary>
  <Child />
</ErrorBoundary>
Child组件从 componentDidMount 中的服务器获取一些数据方法。

componentDidMount() {
  API.getData().then((data) => {
    ...
  });
}

当服务器以导致 Promise 的状态码响应时被抛出,ErrorBoundary组件应该捕获它,但它没有。如果在 componentDidMount 内显式抛出错误方法,然后错误边界做出相应的 react 。例如:

componentDidMount() {
  throw new Error(); 
  // or throw new Promise(resolve => resolve());
}

总是可以用 catch 捕获错误。但是有没有办法让 ErrorBoundary 捕获这些错误?零件?

最佳答案

你可以试试react-error-boundary npm 包。他们有 useErrorHandler处理异步代码的钩子(Hook)。
请参阅此页面了解更多信息 - https://github.com/bvaughn/react-error-boundary#useerrorhandlererror-error

关于javascript - 当 Promise 被拒绝时如何触发 React 错误边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58235156/

相关文章:

javascript - es6 filter JSON返回undefined,filter对象没有

javascript - 避免 Nodejs/react-native 的 Realm.open 中的回调 hell

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

javascript - React-Redux 错误页面管理

Powershell:如何阻止脚本中显示错误?

javascript - `mapHooks`失败时重定向到另一条路由

javascript - sweetalert 立即消失

Javascript 变量无法传递到文本框

node.js - 为什么 formData 不能处理多个文件?

javascript - useRef 用于显示文本区域内的字符数