Javascript 无法从js数组访问对象属性
我有这个简单的代码,可以从api中获取一些对象并将其添加到数组中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
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,但现在我收到一个错误“未定义项”