Javascript 无法从js数组访问对象属性

Javascript 无法从js数组访问对象属性,javascript,Javascript,我有这个简单的代码,可以从api中获取一些对象并将其添加到数组中 const res = await fetch("http://localhost:5000/cart/carts/"+this.state.user); const data = await res.json(); let data1 = []; data.forEach(async item => { const res1 = await fetch("http://localhost:5

我有这个简单的代码,可以从api中获取一些对象并将其添加到数组中

 const res = await fetch("http://localhost:5000/cart/carts/"+this.state.user);
  const data = await res.json();
 let data1 = [];
    data.forEach(async item => {
        const res1 = await fetch("http://localhost:5000/storemanger/products/"+item.product);
          const object = await res1.json();
          data1.push(object);
      });
console.log(data1)
控制台日志的输出

但如果尝试访问第一个元素,如

console.log(data1[0])
输出为“未定义”

我想访问数组中对象的productname,您应该等待.forEach(),但它不存在.forEach的异步版本

检查此项:

尝试此项

let data1 = [];

const promiseArray = data.map(item => fetch("http://localhost:5000/storemanger/products/"+item.product))

Promise.all(promiseArray)
.then(result => Promise.all(result.map(v => v.json()))
.then((values) => {
  data1 = values
});

您的问题是没有等待
fetch
调用完成。由于您的
forEach
运行
async
功能,浏览器将异步运行它们(这意味着它们将被安排在其他时间运行)。因此,您的代码相当于:

让数据1=[]
console.log(数据1)
每个
fetch
调用都返回一个值。如果要确保
data1
具有所需的值,则需要等待
承诺履行

例如,您可以执行以下操作:

const promises=data1.map(url=>fetch(url));
然后(values=>console.log(values));

请注意,所有请求完成时将调用回调。还请注意,此代码不负责处理失败的
获取
es。

如果您更喜欢
异步/等待
语法替代:

您可以使用
等待。。。属于
语法

以json占位符为例

const response = []

const data = [1,2,3]

for await (item of data) {
  const res = await fetch("https://jsonplaceholder.typicode.com/todos/" + item);
  const obj = await res.json()
  response.push(obj)
}

console.log(response) //
最后的反应是产量

[
  {userId: 1, id: 1, title: "delectus aut autem", completed: false},
  {userId: 1, id: 2, title: "quis ut nam facilis et officia qui", completed: false},
  {userId: 1, id: 3, title: "fugiat veniam minus", completed: false}
]

尝试将console.log(data1)放在data1.push(object)之后的foreach中;请粘贴控制台中打印的值。您应该包括以下数据:{…}0:{id:“5ec8ae3e1e6fdd2c24c32e75”,产品名称:“DFDFDFDF版本3”,类别:“男士”,价格:49,折扣:55,}1:{id:“5ec8ae3e1e6fdd2c24c32e75”,产品名称:“DFDFDF版本3”,类别:“男士”,价格:49,折扣:55,}2:{u id:“5ec8ae3e1e6fdd2c24c32e75”,产品名称:“DFDFVersion3”,类别:“Mens”,价格:49,折扣:55,}长度:3 proto:Array(0)添加了一个for await版本,如果您愿意使用更现代的syntaxi尝试for await,但现在我收到一个错误“未定义项”