将数值推入数组后,数组变成了只有一个索引的数值系列。

问题描述 投票:0回答:1

我在获取一个api后,将如下所示的值推送到一个数组中。推送完成后,这个数组突然变成了一个数组[],变得无法访问。

我做错了什么,如何让这个数组可以像array[0]一样,通过它的inde x数来提取值?

我使用了异步函数Promises,来实现这个目的。

async function scrapingId(targetArtist){
    let APIRequest=await fetch(`https://api.songkick.com/api/3.0/search/artists.json?apikey=${myAPIkey}&query=${targetArtist}`)
                   .then(data=>{return data.json()});
    // console.log(APIRequest.resultsPage.results.artist[0].id);

    artistIds.push(APIRequest.resultsPage.results.artist[0].id);


    // console.log(artistIds)
}

下面是异步函数执行的地方。

.then((data)=>{

for (entity of data){
scrapingId(entity.artist);
};

return artistIds

}).then((data)=>{console.log(data)



})

上面的console.log(data)吐出了一个类似数组的东西,但我不认为那是一个合适的数组,它可以通过其索引号进行迭代。

输出的东西好像是一个数组,但是有'key',也就是每个实体的索引号。

谢谢你在前面.Fullcode是附加在这里。https:/codepen.iojotnajoapenwvMwOxz?editors=1111。

javascript asynchronous promise data-visualization
1个回答
1
投票

你返回的是 artistIds 在你 scrapingId(entity.artist) 读取,所以在接下来的 then 你会得到一个空数组

你应该返回 promise 而不是一个数值组

.then((data) => {
  const scrappingCalls = []
  for (const entity of data){
    scrappingCalls.push(scrapingId(entity.artist))
  }
  return Promise.all(scrappingCalls)
})
.then((data)=>{console.log(data)})

或者更短,可以写成

.then(data => Promise.all(data.map(({ artist }) => scrapingId(artist))))
.then(data => console.log(data))

UPDATE:也改变了你的函数,它将返回id。

async function scrapingId(targetArtist){
  let APIRequest = await fetch(`https://api.songkick.com/api/3.0/search/artists.json?apikey=${myAPIkey}&query=${targetArtist}`)
    .then(data => data.json())

  const id = APIRequest.resultsPage.results.artist[0].id
  return id
}
© www.soinside.com 2019 - 2024. All rights reserved.