对于我正在使用的API,我必须反弹3个单独的端点才能获得所需的数据。我被困在最后一个端点上,这让我发疯。以下是我目前正在做(或试图做)的要点。
直接调用终结点 1。通过 map 处理数据(以返回我特别需要的数据),然后推送到 ARRAY 1。
数组 1 完成处理后,我将 ARRAY 1 的数据映射到终结点 2,以对其每个 ID 进行 API 调用,然后将其推送到 ARRAY 2。
数组 2 完成处理后,我将 ARRAY 2 的数据映射到终结点 3,以对其每个 ID 进行 API 调用,然后将其推送到 ARRAY 3。
所有这些步骤都包含在一个承诺中,该承诺通过3个完整的数组进行解析。
步骤1和2做得很好,但是我已经为步骤3尝试了一百万种不同的东西,并且它不断返回。处理这个问题的最佳方式是什么?任何帮助将不胜感激!
router.get("/", (req, res) => {
let artists = [];
let albums = [];
let tracks = [];
const options = {
headers: {
'Authorization': `Bearer ${token}`,
},
};
function getArtists(url) {
return new Promise(resolve => {
axios.get(url, options).then(response => {
artists.push(...response.data.artists.items.map(artist => ({
url: artist.external_urls.spotify,
name: artist.name,
images: artist.images,
id: artist.id,
genres: artist.genres,
})));
let next = response.data.artists.next;
if (next !== null) {
getArtists(next);
} else {
resolve(getAlbums().then(() => getTracks().then(() => res.send({artists, albums, tracks}))));
};
});
});
};
let getAlbums = () => {
return new Promise(resolve => {
const requests = artists.map(item => {
return axios.get(`https://api.spotify.com/v1/artists/${item.id}/albums?market=us&include_groups=single,appears_on`, options).then(response => {
albums.push(...response.data.items);
});
});
Promise.all(requests).then(() => {
const filtered = albums.filter((curr, index, self) => self.findIndex(t => t.id === curr.id) === index);
const sorted = filtered.sort((a, b) => (b.release_date > a.release_date) ? 1 : -1); // change data to filtered to filter duplicates
const sliced = sorted.slice(0, 50);
albums = sliced;
// res.send({artists, albums});
resolve();
});
});
MYYA
相关分类