Я пытаюсь получить многостраничную api и поместить json в массив. Я настроил его так, чтобы он делал необходимое количество наборов и настраивал правильное количество обещаний. Я получаю 50+ разные ответы. Тем не менее, когда я пытаюсь сопоставить каждый из этих ответов, он только вытаскивает первый набор данных и толкает их повторно к массиву. Что я не делаю правильно?
var data;
fetch(URL_ARTISTS3,{
method:'GET'
})
.then(response => response.json())
.then(json => {
data =json;
const apiPromises = [];
var pagesRequired = Math.ceil(json.setlists["@total"] / json.setlists["@itemsPerPage"]);
for (let i=pagesRequired; i>0;i--) {
var fetchurl = URL_ARTISTS3 + '?page = ' + i;
apiPromises.push(fetch(fetchurl, {
method: "GET",
body: json
}));
}
Promise.all(apiPromises)
.then(responses => {
var processedResponses = [];
responses.map(response => response.json()
.then(json => {
/****THIS LINE ADDS THE SAME JSON RESPONSE MULTIPLE TIMES*****/
processedResponses.push(json.setlists.setlist);
})
)
console.log('processedResponses: ', processedResponses)
});
Я не уверен, что это решает проблему, но одна проблема заключается в том, что вы регистрируете processedResponses
до того, как обещания будут разрешены.
Вы можете значительно упростить свой код, переместив вызов response.json()
:
apiPromises.push(
fetch(fetchurl, {method: "GET", body: json})
.then(response => response.json())
.then(json => json.setlists.setlist);
);
// ...
Promise.all(apiPromises).then(processedResponses => console.log(processedResponses));
json.setlists.setlist
имеет одинаковое значение в каждом ответе. В приведенном мною примере невозможно обработать один вызов API несколько раз.