2016-04-02 3 views
-1

Я создаю чатбот. У меня есть функция, как показано ниже:Функция не ждет, пока все будет выполнено до перехода на

function Smoking(){ 
    var userinput=document.getElementById("messages").value     
    window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Do you smoke?"); 
    if (userinput=="Yes"){        
    window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Oh no! Smoking is not good for your health!"); 
}else if(userinput=="No"){         
    window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Good to hear that you are not smoking!"); 
} 
} 

Курильщик() вызывается, когда пользователь попросить Chatbot задать вопрос:

var convpatterns = [ 
[".*hi.*", "Hello there!","Greetings!"], 
[".*ask me.*", Smoking], 
["Yes","You seem quite sure.","OK, but can you elaborate a bit?"] 

Плагин window.iSpeech.speak позволяют системе говорить слова и плагин установлены правильно и работают в других функциях. Однако, когда вызывается функция курения(), система говорит только «курит?» И не ждет ввода пользователя. Когда пользователь вводит текстовое поле «Да» или «Нет», система переходит и распознает входной текст как «Да», а не «Да» в функции Курение(). Поэтому, если пользователь набрал «Да», чатбот скажет «Ты, кажется, совершенно уверен», вместо «О нет! Курение не подходит для твоего здоровья!»

Так что я просто задавался вопросом, есть ли способ, чтобы функция подождала, пока все линии будут выполнены, прежде чем двигаться дальше?

UPDATE

Я попытался положить их на две отдельные функции, но она по-прежнему не работает:

function Smoking(){     
window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Do you smoke?"); 
SmokingAnswer() 
} 

function SmokingAnswer(){ 
var userinput=document.getElementById("messages").value 
if (userinput=="Yes"){        
window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Oh no! Smoking is not good for your health!"); 
}else if(userinput=="No"){         
window.iSpeech.speak(speakPluginResultHandler,nativePluginErrorHandler,"Good to hear that you are not smoking!"); 
} 
} 

Функция SmokingAnswer() не выполняется.

+0

Вы тестируете это в своем веб-браузере? – JesseMonroy650

+0

@ Kerry Функция SmokingAnswer на самом деле выполнена, однако использовать ввод «", потому что пользователь не успел ответить. Запустите SmokingAnswer либо в форме ввода с событием onkeyup, либо нажатием кнопки, как я сказал в своем ответе – mhenkel

ответ

0

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

Для того, чтобы ваше приложение работало надлежащим образом, вы должны разделить его на несколько функций JS. Первая функция вызывается, когда пользователь входит на сайт или фокусирует окно чата. Эта функция задаст вопрос.

Затем пользователь вводит что-то и позволяет сказать, что функция выполняет второй запуск после нажатия пользователем кнопки. Вторая функция затем проверит ввод и оценит возможный ответ. «oh god no ...»/«приятно слышать ...»

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

+0

. Итак, вы говорите, что у меня должны быть две функции, одна из которых задает вопрос, а вторая будет искать пользовательский ввод? Я тоже пробовал это, но когда я вызываю вторую функцию в первой функции, вторая функция не вызывается. Я обновлю вопрос, чтобы показать, как я это сделал. – Kerry

+0

@ Kerry хорошо, это отчасти то, что я считаю, вам нужно вызвать вторую функцию после ввода, в настоящее время ваш JavaScript задает вопрос, а затем запускает оператор if, все в течение одной секунды и меньше. Как вы ожидаете, что кто-то ответит на этот пост? – mhenkel

+0

@ Kerry добавить кнопку, которая вызывает вторую функцию – mhenkel

Смежные вопросы