ожидание обратного вызова приводит к выходу программы - PullRequest
1 голос
/ 19 июня 2019

Написание простого приложения для преобразования текста в речь CLI Node.js с использованием 'prompt' и 'say'.Как заставить приглашение ждать окончания речи, прежде чем показывать новую строку приглашения?

Я переместил chat () за пределы обратных вызовов (см. Прокомментированный код в конце), но это приводит к тому, что приглашение появляется рано (нормальное поведение).

Я ожидал, что приглашение завершится после завершения речи, потому что chat () перезапускается после выполнения обратного вызова say.speak.

Программа завершает работу сразу после завершения say.speak,без отображения нового приглашения.

const prompt = require('prompt')
const say = require('say')

chat()

function chat() {
  prompt.get(['chat'], (error, result)=> {
    if(error) return console.log('prompt <ERROR>: '+error.message)
    if (result.chat === 'exit') {
        terminate_self()
    } else if (result.chat == '') {
      say.speak('No input received.', '', '', ()=> {
        chat() // program terminates once speech is complete
      })
    } else {
      // process input here
      say.speak(result.chat, '', '', ()=> {
        chat() // program terminates once speech is complete
      })
    }
    // chat() // program stays alive, BUT prompt returns before speech is completed
  })
}

current result:
user@homeserver:~/Nodejs/ttschat$ node bin.js
chat |  hey
user@homeserver:~/Nodejs/ttschat$

desired result:
user@homeserver:~/Nodejs/ttschat$ node bin.js
chat |  hey
chat |  hey
chat |  exit
user@homeserver:~/Nodejs/ttschat$

1 Ответ

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

Неопределенная локальная проблема.

Я удалил папку проекта, создал ту же папку, установил, скажем, npm и вставил, и вставил точно такой же код, как и раньше, и теперь он работает как положено.

Большое спасибо dun32 за подтверждение, что проблема НЕ в самом коде!

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