我不能使用从 promise 返回的值

Posted

技术标签:

【中文标题】我不能使用从 promise 返回的值【英文标题】:I can't use the value returned from promise 【发布时间】:2021-12-14 16:15:38 【问题描述】:

我编写代码从我的 api 获取数据。我第一次编写这个代码。

然后我得到结果。没关系

但在那之后我想使用那个值。我编码这个

它向我显示了错误。

我尝试阅读有关 promise 和 async 的内容,等待了很多,但对我没有帮助。请赐教。

import logo from "./logo.svg";
import "./App.css";
import React from "react";

function App() 
  const [stateData, setStateData] = React.useState("");
  const testGetData = async () => 
    const data = await fetch("/api/products/test").then((response) => 
      return response;
    );
    return data;
  ;
 let productData = [];

 testGetData().then((response)=>
   return response.json();
 ).then((res)=>
    productData.push(res);
 );

console.log(productData);
console.log(productData[0].productName);
    
  return (
    <div className="App">
      <header className="App-header">
        <img src=logo className="App-logo"  />
        <p>stateData</p>
      </header>
    </div>
  );


export default App;

【问题讨论】:

请将代码粘贴到您的问题中,而不是使用屏幕截图。 productData 最初是一个空数组。所以productData[0] 不可用(undefined)。所以你正在尝试productData[0].productName,这意味着你正在尝试访问未定义的属性productName 您需要使用setStateData(res) 而不是productData.push(res) 来导致重新渲染。您需要将fetchData() 调用放入useEffect 挂钩中。 数据是异步的,所以你需要等到数据准备好,然后再尝试读取它。 抱歉截图贴。下次我会避免截图询问。我将尝试 setState 以及如何等待数据准备好读取。 【参考方案1】:

首先你需要使用状态来存储请求中的数据

其次,要获取数据,需要将请求包装在 useEffect 中。你可以阅读更多关于它here

这是一篇很好的文章,描述了如何使用钩子https://www.robinwieruch.de/react-hooks-fetch-data异步获取数据

【讨论】:

以上是关于我不能使用从 promise 返回的值的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 承诺请求返回

async 与 promise 的区别

promise与async和await的区别

promise 的基本概念 和如何解决js中的异步编程问题 对 promis 的 then all ctch 的分析 和 await async 的理解

JS ~ Promise.reject()

[万字详解]JavaScript 中的异步模式及 Promise 使用