繁体   English   中英

使用异步函数的值

[英]Using value from async function

我在 React 的功能组件中使用异步函数时遇到了一些问题。 我有一个需要渲染一些数字的功能组件。

函数getNumber :对于每个id,执行 API 调用以检索一个数字(与特定 id 相关联)。 函数createArray从 ID 数组 ( idArray ) 中创建这些数字的数组。

问题是,该功能(分量)访问值返回createArray() [0]我也得到连接错误,因为该类型是一个承诺(回报不等待异步函数)。

什么是最好的解决方案?

 const getNumber = async (id: String) => {
    const numberFromApi = await getNumberFromApi(id); //returns an object
    return numberFromApi.num; //taking the num value out of the object
  };

const createArray = async () => {
    const arrayOfNumbers= await Promise.all(
      idArray.map(id => getNumber (id))
    );
    return arrayOfNumbers;
   }


return(
       <div>{createArray()[0]} </div>)

您真正能做的就是从组件的状态中读取值,并在承诺解决时设置状态:

const [theValue, setTheValue] = useState(0); // or some other initial value, you choose what's best for your component

const getNumber = async (id: String) => {
   const numberFromApi = await getNumberFromApi(id); //returns an object
   return numberFromApi.num; //taking the num value out of the object
};

const createArray = async () => {
    const arrayOfNumbers= await Promise.all(
      idArray.map(id => getNumber (id))
    );
    return arrayOfNumbers;
}

useEffect(async () => {
    const array = await createArray();
    setTheValue(array[0]);
}, []);

return(
   <div>{theValue} </div>
)

在等待 Promise 解决时,您可能希望更改组件以显示某种加载指示器。

您需要创建一些可以在承诺返回时更新的状态:

// your state
const [data, setData] = useState(false);

const getNumber = async (id: String) => {
    const numberFromApi = await getNumberFromApi(id); //returns an object
    return numberFromApi.num; //taking the num value out of the object
  };

const createArray = () => {
  Promise.all(
    idArray.map(id => getNumber (id))
  ).then( 
    // use setData to set whatever you want displayed
  );
}

// you render your data (or nothing if there is none)
return(<div>{data} </div>)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM