Когда я пытаюсь выполнить проверку в JS-реагировании, мне обычно приходится создавать установленную функцию тайм-аута для синхронизации вызовов API-интерфейса выборки с внешним интерфейсом, поскольку вызовы API-выборки занимают немного времени. Есть ли другой способ сделать это? Что-то, что соответствует лучшим практикам, а не повторяющимся кодам?
Я использовал установленное время ожидания с 4000-5000, это работает, но я чувствую, что это не лучший способ сделать это.
редактировать- Ниже приведен фрагмент кода того, что я делал до использования тайм-аута, но по какой-то причине, когда функция запускается, «existingTrains» исчезает из состояния.
async getExistingReservations(date, trackNo, direction, noTickets) {
let self = this;
var trains;
var ticketRange = 100 - noTickets;
var data = {
"date": date,
"trackNo": trackNo,
"direction": direction
}
console.info(data);
//get Existing Reservation Details
await fetch('http://localhost:5000/resRecords/getSeats', {
method: 'POST',
body: JSON.stringify(data),
headers: {'Content-Type': 'application/json'}
})
.then(response => {
return response.json()
})
.then(json => {
console.info(json)
trains = json.find(function (tickets) {
return tickets.noTickets < ticketRange
})
self.setState({
existingTrains: trains
}
)
});
}
Привет, Шакил. Обычно вам не нужно использовать setTimeout
в React. Если вы можете поделиться с нами примером своего кода, мы могли бы показать вам, как это сделать без setTimeout
.
вы пропустили ключевое слово async
перед функцией getExistingReservations
в своем посте?
ой. Да, прости. Спасибо, что указали на это. обновлено. @dqlgnoleht
Лучший способ решить эту проблему — использовать async -> await
.
const getNetworkRequest = async (): string => {
const r = await makeNetworkRequest();
console.info(r);
if (r.data){ return 'got it!' }
return 'no data :(';
}
Это абсолютно не лучший способ сделать это; это наверное самое худшее. Посмотрите на обещания.