javascript - 在 ReactJS 中呈现已解决或已拒绝的 Promise 值

标签 javascript reactjs typescript react-native es6-promise

所以,我得到了这个函数 fetchData(),它返回一个被拒绝或已解决的 promise 。如果 promise 解决了我如何在页面上呈现它?

function Fetchdata() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (Math.random() > 0.5) {
                resolve(`resolved`);
            } else {
                reject(new Error("err"));
            }
        }, time);
    });
}

最佳答案

  • 为每个请求状态提供一些初始状态
  • 使用 promise-chain 或 async/wait with try/catch
  • 更新渲染函数

使用 promise 链的力量。

class App extends React.Component {
   state = {
     data: null,
     error: null,
     loading: true;
   };

   componentDidMount() {
      fetchData()
        .then(data => {
          // promise resolved
          // handle happy path, update state.data
        })
        .catch(err => {
          // promise rejected
          // handle sad path, update state.error
        })
        .finally(() => {
          // promise is settled
          // set loading false
        });
   }
     
   render() {
      const { data, error, loading } = this.state;

      if (loading) {
        <div>Loading...<.div>;
      }

      return (
          <div>
              <h1></h1>
              {error && <div>Error</div>}
              {data && <div>{data}</div>
          </div>
      );
  }
}

以类似的方式在 try/catch/finally 中使用 async/await

async componentDidMount() {
  try {
    const data = await fetchData();
    // promise resolved
    // handle happy path, update state.data
  } catch(err) {
    // promise rejected
    // handle sad path, update state.error
  } finally {
    // promise is settled
    // set loading false
  }
}

关于javascript - 在 ReactJS 中呈现已解决或已拒绝的 Promise 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63717787/

相关文章:

javascript - 将 Facebox "close button"放在右上角而不是右下角

css - 样式组件也可以在服务器上呈现吗?

javascript - 在渲染中 react Js onClick

angular - 测试依赖于服务的管道

javascript - 当属性不相同时过滤数组属性的值

Javascript-如何遍历无效的 JSON

javascript - AJAX 获取的 HTML 完全加载后加载 Javascript

node.js - 如何为以下设置安装 SSL(React 前端 + Nodejs 后端 + 自定义域 Heroku)

laravel - 在 node_modules 文件夹中找不到模块(但文件存在)

javascript - 如何检查一个键值对(在一个数组中)是否存在于另一个数组中?