React - Как синхронизировать внешний интерфейс с внутренними запросами без использования setTimeout?

Когда я пытаюсь выполнить проверку в 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
                    }
                )
            });

    }

Это абсолютно не лучший способ сделать это; это наверное самое худшее. Посмотрите на обещания.

Pointy 28.05.2019 03:23

Привет, Шакил. Обычно вам не нужно использовать setTimeout в React. Если вы можете поделиться с нами примером своего кода, мы могли бы показать вам, как это сделать без setTimeout.

GG. 28.05.2019 03:26

вы пропустили ключевое слово async перед функцией getExistingReservations в своем посте?

thelonglqd 28.05.2019 03:45

ой. Да, прости. Спасибо, что указали на это. обновлено. @dqlgnoleht

Shakeel Nijabdeen 28.05.2019 03:53
Поведение ключевого слова "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) для оценки ваших знаний,...
0
4
389
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Лучший способ решить эту проблему — использовать async -> await.

const getNetworkRequest = async (): string => {
  const r = await makeNetworkRequest();
  console.info(r);

  if (r.data){ return 'got it!' } 
  return 'no data :(';
}

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