как запустить две функции одновременно внутри componentDidMount - PullRequest
1 голос
/ 09 июля 2019

У меня есть две функции внутри "componentDidMount", каждая функция считывает значения датчика и отправляет их в бэкэнд (колбу), одна из функций работает намного быстрее, чем другая, хотя так быть не должно.Как я могу отправить значения из двух функций одновременно (параллельно)?скажем, я получаю 40 значений в бэкэнде каждую секунду, я хочу, чтобы почти 20 из этих значений были из первой функции, а переименование 20 - из второй функции

componentDidMount() {
SensorManager.startAccelerometer(30); // To start the accelerometer with a minimum delay of 50ms between events.
DeviceEventEmitter.addListener("Accelerometer",function(data) {
  fetch("http://192.168.1.107:5000/api/or", {
    method: "POST",
    headers: {
      Accept: "application/json",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      accelerometer: data
    })
  })
    .then(response => response.json())
    .then(responseJson => {
      console.log("hello");
    })
    .catch(error => {
      console.error(error);
    });
});

SensorManager.startOrientation(50);
DeviceEventEmitter.addListener("Orientation",function(data) {
  fetch("http://192.168.1.107:5000/api/or", {
    method: "POST",
    headers: {
      Accept: "application/json",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      orientation: data
    })
  })
    .then(response => response.json())
    .then(responseJson => {
      console.log("hello");
    })
    .catch(error => {
      console.error(error);
    });
});
}

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

У вас есть обратный вызов, когда происходит каждое из этих двух отдельных событий.Вместо немедленного выполнения запросов API (для каждого события) - вы можете попытаться временно сохранить эти данные и написать логику для более равномерного управления запросами POST.

Первое событие срабатывает => Сохранять данные акселерометра.Если данные для ориентации уже существуют => сделать два запроса POST (и наоборот).

Переключение на асинхронное / ожидание может быть более читабельным, если вы собираетесь использовать логику для объединения запросов.

Я согласен, что контрольные тесты / просмотр документации могут указывать на то, почему эти запросы так радикально отличаются по времени.API был создан для отдельного управления запросами, поэтому просто убедитесь, что вы можете рассчитывать на событие ориентации для каждого события акселерометра - или, по крайней мере, изящно обрабатывать ошибку.

0 голосов
/ 09 июля 2019

Это зависит только от событий, которые вы слушаете. Если вы хотите что-то чище, не используйте слушателей. Используйте геттеры и делайте это в виде цикла:

setInterval(() => {
   getAccelerometer()
   fetch('accelerometer params')
   getOrientation()
   fetch('orientation params')
}, 100)

...