Javascript .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

我想使用fetchapi打印JSON对象的每个对象,并使用forEach方法迭代响应 作用

 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,而是来自捕获。

相册如何看起来像Log
albums
到控制台并检查数据及其类型。请公布准确的错误。“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 }