Почему моя функция setTimeout показывает консольную часть только один раз после промежутка времени в 10 секунд, но после этого она печатает консольную часть за 1 секунду - PullRequest
0 голосов
/ 29 марта 2020
const rootRef = firebase.database().ref().child('distance');
        rootRef.on('value',snap =>{
            console.log("Usage value",snap.val());
            let prevData=this.state.percentage;
            this.consumptionHandler(prevData, snap.val())
            this.watermeterHandler(snap.val());
            setTimeout(()=>{
                console.log('hi');
            },10000)

        })

Я пытаюсь создать веб-приложение, использующее реагирование. Он использует FireBase в качестве базы данных. Я работаю над базой данных FireBase в реальном времени. Мне было интересно, что если я использую функцию setTimeout внутри .on (), я думал, что «hi» будет печататься через каждые 10 секунд, но вряд ли только впервые «hi» появится через 10 секунд и после этого «hi» всего за одну секунду. Мои функции, то есть потреблениеHandler и watermeterHandler, работают нормально, у меня есть проблемы только с функцией setTimeout.

Функция settimeout работает только один раз?

Пожалуйста, предоставьте решение, которое «hi» появляется в консоли только через каждые одну секунду.

Дайте мне знать, если требуется дополнительная информация.

Проверьте, не помогает ли это изображение консоли console image

На изображении значение использования - это значение, которое я получаю из своего firebase. Как новичок, я мало что знаю о веб-разработке, но я думаю, что метод .on () работает рекурсивно, но почему для каждой рекурсии setTimeout не работает должным образом, так как первый 'hi' появляется через 10 секунд, но он не совпадает с другим 'hi', как показано

В соответствии с указаниями, я написал аналогичный простой код того, чего я хочу достичь, но в этом коде setTimeout работает правильно.

const recursiveHandler=(i)=>{
  if(i ===10){
    return
  }
  setTimeout(()=>{
      console.log(i);
      i++;
      recursiveHandler(i)
  }, 10000)

}

recursiveHandler(1);

1 Ответ

1 голос
/ 29 марта 2020

может быть вам нужно использовать rootRef.once вместо rootRef.on, а затем setInterval вместо setTimeout. Я не уверен в том, чего вы пытаетесь достичь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...