Здесь нужно рассмотреть две вещи. Во-первых, если вам действительно нужна задержка, лучше дождаться обещания, чем использовать сон. Вы можете сделать это через await new Promise (resolve => setTimeout(resolve, DELAY_LENGTH);
. Я часто использую это в сочетании с индикатором набора текста, чтобы дать боту более естественное чувство разговора, когда он отправляет два или более дискретных сообщения без ожидания ввода пользователя.
Однако, как упоминал Эри c, кажется, как вы могли бы хотеть диалог водопада вместо этого для своего случая использования. Этот пример из образцов Botbuilder является хорошим примером. Каждый шаг будет подсказкой, и он будет ждать ввода пользователя, прежде чем продолжить. Я не буду пытаться написать весь бот здесь, но один шаг вопрос-ответ будет выглядеть примерно так:
async firstQuestion(stepContext) {
return await stepContext.prompt(TEXT_PROMPT, 'Question 1');
}
async secondQuestion(stepContext) {
stepContext.values.firstAnswer = stepContext.result;
return await stepContext.prompt(TEXT_PROMPT, 'Question 2');
}
и так далее. Не уверен, что вы делаете с ответами, но в приведенном выше примере я сохраняю его в stepContext.values, чтобы все ответы были доступны на последующих этапах как часть объекта контекста.
Если вы можете подробнее о вашем сценарии использования / ожидаемом поведении и расскажите, что такое askFirstSetOfQuestions
, мы можем предоставить дополнительную помощь.