javascript - 如何解决 Promise pending 的问题

标签 javascript reactjs async-await

我目前正在尝试在 React 中创建 protected 路由功能。我希望 result 将返回一个 bool 值而不是一个 promise ,而不会将 ProtectedRoute 更改为 async:

 import React from "react";
    import { Redirect, Route } from "react-router-dom";
    import { CheckToken } from "./RequestAction"
    
    function ProtectedRoute({ component: Component, ...restOfProps }) {
    
      const result = (async () => {
        const res = await CheckToken() 
        return res;
      })()
     
      console.log(result); //log-> Promise {<pending>}[[Prototype]]: Promise[[PromiseState]]: "fulfilled"[[PromiseResult]]: false
      return (
        <Route
          {...restOfProps}
          render={(props) =>
            result ? <Component {...props} /> : <Redirect to="/login/" />
          }
        />
      );
    }
    
    
    export default ProtectedRoute; 

这是 CheckToken 函数:

 import axios from "axios";
 async function CheckToken() {
    let result = null;
    await axios
      .get(`http://localhost:5000/protected`, 
        {"withCredentials": true}
      )
      .then((res) => {
        console.log("res.data.status:",res.data)
        if (res.data.status === "success") {
            result = true
        }
      })
      .catch((err) => {
        result = false
      });
      console.log("result:",result);
      return result

}

最佳答案

const useToken = () => {
    const [token, setToken] = useState(null);
    useEffect(() => {
        const f = async () => {
            const res = await CheckToken();
            //TODO: add check login;
            setToken(res);
        };
        f();
    })
    return token;
}

function ProtectedRoute({ component: Component, ...restOfProps }) {
  const token = useToken();
  return (
    <Route
      {...restOfProps}
      render={(props) =>
        token ? <Component {...props} /> : <Redirect to="/login/" />
      }
    />
  );
}

函数组件主体不能是异步的。

关于javascript - 如何解决 Promise pending 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68663809/

相关文章:

javascript - 如何为 Highchart 中的每个条形指定名称(工具提示)

javascript - 我如何将 VaniilaJS 嵌入到 React 中?

c# - 使用 Entity Framework 异步删除行

javascript - 正则表达式 InputNumber 格式化程序 ant-design

javascript - 在 then 回调中使用 await - 保留关键字 'await'

javascript - 如何从第三方库中获取 'Uncaught (in promise) Error'?

javascript - php 和 javascript 中的数组

javascript - 我应该使用 window.load 还是 document.ready jquery

javascript - 是否可以根据 y 轴值突出显示 Dimple.js 条形图中的条形?

reactjs - 同时 react 两个上下文