У меня изначально был только один URL-адрес для извлечения данных, и мое приложение работало безупречно. Но потом я понял, что мне нужно использовать два разных URL-адреса для получения данных, которые мне нужны. Поэтому я немного изменил код. Все почти то же самое, за исключением функции getData
, где я использовал map
для перебора списка URL-адресов и получения данных. Теперь мое приложение действительно глючит.Почему моя функция поиска так медленно + багги иногда?
Проблема:
Когда я искать серпантин, иногда никогда не штукатурки результата на странице. И сообщение "search for your favorite streamer!"
не исчезает, хотя this.state.value
сейчас НЕ равно ' '
. Но когда я меняю вход, он получается из ниоткуда.
Иногда он не может отобразить данные, и я получаю вывод FinderResultContainer
без данных. (Нет имени, нет img, нет офлайн/онлайн.)
Что здесь происходит? Я чувствую, что это потому, что я не использую методы жизненного цикла компонентов. Если да, то что именно мне нужно сделать? Я полный новичок, поэтому мне нужно какое-то руководство.
getData(value) {
let streamerData = [];
let streamerInfo = {};
let urls = ['https://wind-bow.gomix.me/twitch-api/streams/' + value, 'https://wind-bow.gomix.me/twitch-api/users/' + value];
urls.map(function(each, index) {
fetch(each).then((response) =>
response.json()
).then((streamer) => streamerData.push(streamer)).then(()=>streamerInfo[index]=streamerData[index]).then(()=>{if (index === urls.length-1){this.setState({streamer: streamerData})}})},this)
}
https://codepen.io/brood915/pen/OWQpmy
, так как вы делаете два вызова ajax (я предполагаю, что они являются вызовами ajax), вы, вероятно, должны использовать функцию, которая ждет, когда все они ответят, прежде чем делать последнюю вещь. –
Используйте обещания, потому что веб-API являются асинхронными по своей природе Попробуйте https://caolan.github.io/async/ library –