我在获取一个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。
你返回的是 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
}