Javascript .forEach(…)在获取时未定义
我想使用fetchapi打印JSON对象的每个对象,并使用forEach方法迭代响应 作用Javascript .forEach(…)在获取时未定义,javascript,foreach,fetch,Javascript,Foreach,Fetch,我想使用fetchapi打印JSON对象的每个对象,并使用forEach方法迭代响应 作用 artistSelected(evt){ let artistId = evt.target.parentElement.id; fetch("http://localhost:3000/artists/"+artistId+"/albums") .then((response) => { if (re
artistSelected(evt){
let artistId = evt.target.parentElement.id;
fetch("http://localhost:3000/artists/"+artistId+"/albums")
.then((response) => {
if (response.ok) {
return response.json();
} else {
throw new Error('a problem occured');
}
})
.then((response) => {
let albums = response;
albums.forEach(value => {
console.log(value)
})
.catch((error) => {
console.log(error);
})
})
}
当我运行函数时,出现错误TypeError:albums.forEach(…)未定义
,我无法打印每个对象
Album JSON响应的一个示例可以是:
[
{
"id": "the_rolling_stones",
"artistId": "rolling_stones",
"year": 1964,
"title": "The Rolling Stones",
"label": "ABKCO Records",
"cover": "http://cps-static.rovicorp.com/3/JPG_500/MI0002/193/MI0002193977.jpg"
},
{
"id": "12_5",
"year": 1964,
"artistId": "rolling_stones",
"title": "12x5",
"label": "ABKCO Records",
"cover": "http://cps-static.rovicorp.com/3/JPG_500/MI0000/498/MI0000498502.jpg"
},
{
"id": "out_of_our_heads",
"artistId": "rolling_stones",
"year": 1965,
"title": "Out of Our Heads",
"label": "ABKCO Records",
"cover": "http://cps-static.rovicorp.com/3/JPG_500/MI0001/682/MI0001682084.jpg"
}
]
当我打印第一个的响应时,然后“我有:
Res
作为参考,我将获取您的JSON响应(对象数组),通过它,我们可以通过foreach循环轻松地迭代数组
var相册=[
{
“id”:“滚石乐队”,
“艺人”:“滚石”,
“年份”:1964年,
“标题”:“滚石乐队”,
“标签”:“ABKCO记录”,
“封面”:http://cps-static.rovicorp.com/3/JPG_500/MI0002/193/MI0002193977.jpg"
},
{
“id”:“12_5”,
“年份”:1964年,
“艺人”:“滚石”,
“标题”:“12x5”,
“标签”:“ABKCO记录”,
“封面”:http://cps-static.rovicorp.com/3/JPG_500/MI0000/498/MI0000498502.jpg"
},
{
“id”:“从我们的脑袋里”,
“艺人”:“滚石”,
“年”:1965年,
“标题”:“从我们的头脑中”,
“标签”:“ABKCO记录”,
“封面”:http://cps-static.rovicorp.com/3/JPG_500/MI0001/682/MI0001682084.jpg"
}
];
album.forEach(值=>{
console.log(value.title)
});代码>假设这是一个类型安全问题,解决方案如下:
。然后((响应)=>{
如果(答复){
让albums=response.json();
albums.forEach(值=>{
console.log(值)
})
}否则{
抛出新错误(“出现问题”);
}
}).catch((错误)=>{
console.log(错误);
})
我找到了解决方案,
我不知道为什么没有人看到它,但捕获不在正确的位置,因为当我切换到Chrome时,错误不是来自foreach,而是来自捕获。相册如何看起来像Logalbums
到控制台并检查数据及其类型。请公布准确的错误。“forEach(…)未定义”似乎不太可能。它应该是“无法读取未定义的属性forEach
”或“forEach
不是函数”很可能response
不是数组。通过console.log(response)
在每个部分中仔细检查。response对象不是数组,而是包含多个属性的对象。我有[object array],这如何解决OP的问题?OP已经知道forEach方法。如果问题没有足够的详细信息,则应该关闭而不回答。它们传递来自上一个promise处理程序的response.json()
,并且类型检查似乎表明albums
实际上是一个数组。因此,我认为您必须检查response
而不是response.ok
,因为数据中没有ok
属性。
ponse { type: "cors", url: "http://localhost:3000/artists/the_clash/albums", redirected: false, status: 200, ok: true, statusText: "OK", headers: Headers, body: ReadableStream, bodyUsed: false }