У меня проблемы с истинным пониманием асинхронного поведения. Я звоню в японскую базу данных, но из-за асинхронного поведения мои вызовы находятся на шаг впереди входа пользователя. Например, пользователь вводит буквы G, и ответа не будет, пока пользователь не наберет Go. Затем мое приложение отправит запрос на поиск по букве G, когда пользователь исключает результаты для Go. Надеюсь, это имеет смысл.React Native Fetch asynchronous
Здесь я делаю свой асинхронный вызов.
sendData(){
fetch('http://jisho.org/api/v1/search/words?keyword='+this.state.wordLookUp).then((dictionary) => {
return dictionary.json();
}).then((dictionary) => {
console.log(dictionary);
this.setState({
dictionary:dictionary.data,
loading:false
})
}).done((dictionary)=>{
console.log(this.state.dictionary);
});
}
Прямо здесь, где я отображения результатов пользователю
renderList(){
if(!this.state.wordLookUp.length){
this.state.dictionary = null;
}
if(!this.state.dictionary){
return(
<View>
<Text>loading</Text>
</View>
)
}else{
return this.state.dictionary.map(words =>
<ScrollView>
<Text>{words.senses[0].english_definitions} {words.japanese[0].reading}</Text>
</ScrollView>
);
}
}
Моя делают функцию здесь:
render(){
return(
<View>
<Header/>
<Fumi
label={'Add Englishword....'}
iconClass={FontAwesomeIcon}
iconName={'pencil'}
iconColor={'#f95a25'}
onSubmitEditing={(wordLookUp) => {
this.sendData();
dismissKeyboard();
}}
onChangeText={(wordLookUp) =>{
this.setState({wordLookUp});
console.log(wordLookUp);
this.sendData();
this.renderList();
}}
/>
{this.renderList()}
</View>
)
}
}
Вот словарь, который вдохновил мой дизайн. http://www.nihongodict.com/w/15758/ichiranhyou/
Заранее спасибо.
Супер полезный сайт! (Для тех, кто изучает японский язык), я думаю, вам нужно настроить буферную систему, чтобы ждать, пока пользователь больше не набирает текст. Например, подождите 300 мс, а затем возьмите значения и сделайте выборку. Если пользователь набирает букву, вы будете ставить в очередь запрос на выборку, но если пользователь снова наберет, вы отмените предыдущую очередь и создадите новую очередь еще на 300 мс. – Crysfel
. Есть ли сайт, на который вы можете ссылаться. Я очень новичок в этом языке. Таким образом, любые ресурсы будут очень оценены. – o6t9o