Как я могу запретить этой панели поиска API выборки загружать старые запросы до того, как новые будут сохранены через localStorage?

Я создал панель поиска для NASA API, используя fetch().

Изображения для первого поискового запроса загружаются и отображаются, но для отображения нового запроса требуется несколько триггеров прослушивателя событий кнопки поиска. Похоже, что к старому ответу обращаются до его обновления в локальном хранилище или что-то подобное?

Вот Codepen: https://codepen.io/ana-ana/pen/orgbjB

Я пытался использовать setTimeout на searches.push(JSON.parse(localStorage.getItem('response')));, чтобы предотвратить проблему. Я также несколько раз пытался запустить функцию выполнения. Я также пытался сохранять ответ json с другим именем в localStorage каждый раз, когда функция запускается.

function clear(){
    document.getElementById('images').innerHTML='';
}
var searches = [];
function search(inquiry){
console.info(fetch(inquiry));
        fetch(inquiry)
                  .then(function(response) {
                    var status = response.status;
                    return response.json();
                  })
                  .then(function(jsonResponse) {
                    localStorage.setItem('response', JSON.stringify(jsonResponse));
                  });
searches.push(JSON.parse(localStorage.getItem('response')));
}
function display(){
    for(i = 0; i<searches[searches.length - 1].collection.items.length; i++){
        var img = document.createElement('img');
        img.src = searches[searches.length - 1].collection.items[i].links[0].href;
        document.getElementById('images').appendChild(img);
    }   
}


document.getElementById('btn').addEventListener('click', execute);

function execute(){
    clear();
    search(`https://images-api.nasa.gov/search?q=${document.getElementById('searchbar').value}`);
    console.info(searches[searches.length - 1]);
    display();
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашей функции поиска вы нажимаете на свой массив searches за пределами промиса, что означает, что это, вероятно, происходит до того, как промис имел возможность решить

Редактировать: перемещение display() в обещание решило проблему!! Спасибо!! ........ Перемещение searches.push внутри обещания помогло! Массив поиска обновляется только после разрешения нового промиса. проблема в том, что для обновления отображения по-прежнему требуется несколько поисковых кликов! я обновил codepen, чтобы отразить ваш ответ: codepen.io/ana-ana/pen/orgbjB

anacodes 11.06.2019 21:56

Другие вопросы по теме