Javascript: значение не может пройти через условие, хотя это правда - PullRequest
0 голосов
/ 19 июня 2019

Когда я делаю что-то, я обнаруживаю странную проблему.Я пытаюсь сделать распознавание голоса.Первая часть условия работает правильно, но она не работает для второй части.

var v;

function test() {
  var ses = new webkitSpeechRecognition();
  ses.lang = "En"
  ses.continuous = true;
  ses.start();
  ses.onresult = function(event)
    if (event.results.length > 0) {
      sonuc = event.results[event.results.length - 1];
      document.querySelector("input").value = sonuc[0].transcript;
      v = sonuc[0].transcript;
      console.log(v + " 1");

      if (v == "good") {
        switchLED('on');
        console.log(v + "2");
        console.log("OK !");
        console.log("LED ok");
      }

      if (v == "bad") {
        switchLED('off');
        console.log(v + "2");
        console.log("OK !");
        console.log("LED off");
      }
    }
  }

Впервые я сказал: good и результаты были:

good 1 
good 2
OK ! 
LED OK

Это было правильно.

Затем, во второй раз, если я скажу: bad результат будет:

bad 1

, и он не прошел условие if(v == "bad").

Это происходит только тогда, когда bad - это второе слово, которое я сказал.Если я в первый раз обновлю страницу и скажу «плохо», я получу все правильные результаты.

1 Ответ

0 голосов
/ 19 июня 2019

Согласно документации Mozzila :

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

Это соответствует точно , что вы описали.Поскольку ваша сессия по распознаванию речи является непрерывной (как видно из ses.continuous = true), происходит следующее: когда вы произносите любое слово в первый раз, транскриптор получит слово правильно.Но когда он распознает следующее слово, будет добавлен начальный пробел.Вы, вероятно, неправильно скопировали вывод своей консоли, который должен был выглядеть так:

good 1 
good 2
OK ! 
LED OK

 bad 1 
^ leading space here

Действительно, " bad" не равно "bad".Вот почему строка не прошла условие.Чтобы решить эту проблему, просто наберите trim вашей строки:

var v;

function test() {
  var ses = new webkitSpeechRecognition();
  ses.lang = "En"
  ses.continuous = true;
  ses.start();
  ses.onresult = function(event)
    if (event.results.length > 0) {
      sonuc = event.results[event.results.length - 1];
      document.querySelector("input").value = sonuc[0].transcript;
      v = sonuc[0].transcript.trim(); // <-- trim here
      console.log(v + " 1");

      if (v == "good") {
        switchLED('on');
        console.log(v + "2");
        console.log("OK !");
        console.log("LED ok");
      }

      if (v == "bad") {
        switchLED('off');
        console.log(v + "2");
        console.log("OK !");
        console.log("LED off");
      }
    }
  }

Тогда ваш код должен работать как положено.Надеюсь, это поможет!

...