Как реализовать функцию таймера без задержки в React-Native - PullRequest
0 голосов
/ 25 мая 2020

Я создаю приложение с expo, которое содержит c музыкальный секвенсор. Это означает, что события (воспроизведение звуков) должны происходить точно во времени (т.е. каждые 1000 мс или 500 мс и т. Д. c). Прямо сейчас я использую setTimeout в al oop, но этого явно недостаточно для задачи, поскольку JS работает в одном потоке, и даже задержка в несколько мс между событиями взрывает все это. Мой текущий код выглядит следующим образом - проверяет, какие звуки были установлены как «Активные» в определенной «доле», а затем соответственно проходит и воспроизводит «активные».


      const wait = (ms) => {
          return new Promise(resolve => {
              setTimeout(resolve, ms);
          });
        }

      const loop = async() => {

      for (var i = 1; i <= 8; i++) {
        switch (true) {
          case beat[i].hat && beat[i].kick && beat[i].snare:
            playHat()
            playSnare()
            playKick()
            break;
            case beat[i].snare && beat[i].kick:
              playSnare()
              playKick()
              break;
            case beat[i].hat && beat[i].kick:
              playHat()
              playKick()
            break;
            case beat[i].hat && beat[i].snare:
              playHat()
              playSnare()
            break;
            case beat[i].hat:
              playHat()
            break;
          case beat[i].snare:
            playSnare()
            break;
            case beat[i].kick:
              playKick()
              break;
        }

          await wait(1000);
          }
      }

      loop();



  }

Мои исследования до сих пор кажется, что фоновые задачи в WebView могут быть лучшим способом go, поскольку функции таймера могут работать в независимом потоке, но я не совсем уверен, как сделать это с точки зрения пользовательского интерфейса. Мне интересно, есть ли здесь альтернативные решения, в основном я хочу запустить функцию тайм-аута в al oop с минимальной задержкой / без задержки. Любые мысли приветствуются!

...