【发布时间】:2021-01-15 22:06:56
【问题描述】:
在这个代码块中,我正在映射一组 Spotify 网址,获取那里的数据,并尝试将它们推入状态。截至目前,此代码返回一组承诺,并且不等待实际数据。这对我来说没有意义,因为我正在等待来自 axios 调用的数据。
const fetchSpotifyData = async () => {
const allTracks = data.map(async (d) => {
let track = {
album: "",
image: "",
artist: "",
trackName: "",
externalUrl: "",
};
const incomingTrack = await axios.get(
`https://api.spotify.com/v1/tracks/${d.uri}`,
{
headers: {
Authorization: `Bearer ${spotifyToken}`,
},
}
);
console.log(incomingTrack) // the data is here and is correct
track.album = incomingTrack.data.album.name;
track.image = incomingTrack.data.album.images[0].url;
track.artist = incomingTrack.data.artists[0].name;
track.trackName = incomingTrack.data.name;
track.externalUrl = incomingTrack.data.external_urls.spotify;
console.log(track) // this shows the correct track data
return track;
});
console.log(allTracks)// Array [ Promise {
// "_U": 0,
// "_V": 0,
// "_W": null,
// "_X": null,
// },
// ]
return allTracks;
};
【问题讨论】:
-
如果您将
async回调传递给任何循环数组方法,例如forEach、map等。那么你必须Promise.all结果数组。方法本身不会在循环之间await。或者,您可以使用for...of循环单独处理每个 Promise。
标签: javascript reactjs react-native axios