Javascript Fetch и Map не работают правильно

1

Я пытаюсь получить многостраничную 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)     

        });
Теги:

1 ответ

1
Лучший ответ

Я не уверен, что это решает проблему, но одна проблема заключается в том, что вы регистрируете 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));
  • 0
    Спасибо за ответ. Я попробовал это, и это не решило проблему того, что один и тот же JSON толкали несколько раз.
  • 0
    В этом случае каждый вызов либо возвращает одинаковые данные, либо json.setlists.setlist имеет одинаковое значение в каждом ответе. В приведенном мною примере невозможно обработать один вызов API несколько раз.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню