цикл js — while повторяется только один раз

#javascript #loops #while-loop #fivem

Вопрос:

Я учусь программировать.

Я сделал следующий сценарий, в котором при выполнении будет включен или выключен режим raveMode в зависимости от его текущего состояния. Моя цель состояла в том, чтобы сделать так, чтобы, когда raveMode был включен, он повторял цикл while, пока его снова не выключили, однако, похоже, он работает только частично. Вот код:

 Delay = (ms) => new Promise(res => setTimeout(res, ms));
    

raveMode = !raveMode
    print(raveMode)
    while (raveMode) {
      SetVehicleLights(playerInfo.vehicle, 2);
      await Delay(300);
      SetVehicleLights(playerInfo.vehicle, 0);
    }
 

В основном, SetVehicleLights(..., 2) включается и SetVehicleLighs(..., 0) выключается освещение автомобиля. Однако код включает свет только при включенном режиме raveMode и выключает его при выключенном режиме raveMode, вместо того, чтобы повторно включать и выключать их.

Я использую тот же сценарий в приведенном ниже коде, и свет включается и выключается один раз, как и предполагалось в этом случае:

 if (!GetIsVehicleEngineRunning(playerInfo.vehicle)) {
      SetVehicleLights(playerInfo.vehicle, 2);
      await Delay(300);
      SetVehicleLights(playerInfo.vehicle, 0);
}
 

Комментарии:

1. Если ravemode верен, я бы ожидал, что загорится свет, задержка 300, свет выключится на мгновение или, возможно, вообще не будет виден, а затем свет снова загорится. Так что это будет выглядеть так, как будто свет просто горит.

2. Спасибо, @Джеймс, ты был прав. Я добавил новую задержку после выключения света.

Ответ №1:

Цикл повторяется просто отлично. Но между «выключением света» в конце одной итерации цикла и «включением света» в начале следующей итерации цикла нулевая задержка. Таким образом, вы никогда не воспринимаете свет как выключенный.

Поскольку вы хотите иметь две заметные задержки, добавьте вторую задержку:

 while (raveMode) {
  SetVehicleLights(playerInfo.vehicle, 2);
  await Delay(300);
  SetVehicleLights(playerInfo.vehicle, 0);
  await Delay(300);
}
 

Ответ №2:

 while (raveMode) {
  SetVehicleLights(playerInfo.vehicle, 2);
  await Delay(300);
  SetVehicleLights(playerInfo.vehicle, 0);
  await Delay(300);
}