Не удается прочитать свойство ‘length’ неопределенной ошибки в bot framework

#javascript #node.js #azure #botframework

#javascript #node.js #azure #botframework

Вопрос:

Я получаю данные из axios запроса get и перемещаю их в массив xyz . Но когда я отправляю xyz в step.prompt , он выдает эту ошибку:

» [onTurnError]: TypeError: не удается прочитать свойство ‘length’ неопределенной»

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

 async someFunction(step){
    var xyz = [];
    try {
        const response = await axios.get(`url`);

        for (var i = 0; i < response.data.length; i  ) {
            xyz[i] = response.data[i].xzyElement;
        }
    } catch (error) {
        console.log(`error ${error}`);
    }
    return await step.prompt(PROMPT, 'Choose any one.', xyz);
}
  

Я хочу отправить элементы в xyz в качестве приглашения пользователю.

Ответ №1:

Для того, чтобы фреймворк бота использовал приглашение, вы могли бы использовать что-то вроде приведенного ниже

Запрос на образец проверки размера

 return await stepContext.prompt(
        SIZE_RANGE_PROMPT, {
            prompt: 'How many people is the reservation for?',
            retryPrompt: 'How large is your party?',
            validations: { min: 3, max: 8 },
        });
  

запрос на образец выбора местоположения

 async promptForLocation(stepContext) {
    // Record the party size information in the current dialog state.
    stepContext.values.size = stepContext.result;

    // Prompt for location.
    return await stepContext.prompt(LOCATION_PROMPT, {
        prompt: 'Please choose a location.',
        retryPrompt: 'Sorry, please choose a location from the list.',
        choices: ['Redmond', 'Bellevue', 'Seattle'],
    });
}
  

Я предполагаю, что вашим вторым параметром должен быть любой массив / список, вместо этого вы передаете строку с именем «Выберите любой», поэтому она выдает «Не удается прочитать свойство ‘length’ неопределенного», поскольку оно должно пытаться получить доступ к первому или второму элементу массива, а переданный параметр является строкой.

Второй параметр метода prompt принимает объект prompt options, который имеет следующие свойства.

введите описание изображения здесь

Для справки, вы можете прочитать подробности в приведенном ниже документе

https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-prompts?view=azure-bot-service-4.0amp;tabs=javascript

Надеюсь, это поможет.

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

1. Я пробовал с этим кодом. возврат ожидает StepContext.prompt(LOCATION_PROMPT, { приглашение: ‘Пожалуйста, выберите местоположение.’, retryPrompt: ‘Извините, пожалуйста, выберите местоположение из списка.’, варианты: [‘Редмонд’, ‘Бельвью’, ‘Сиэтл’], }); Но в моем случае значения выбора должны быть получены из динамического массива, в это время я получаю проблему с длиной. Если я объявляю его локально в функции со значениями, то проблем нет.

Ответ №2:

 for (var i = 0; i < response.data.length; i  ) {
    xyz[i] = `${response.data[i].xzyElement}`;
}
  

Попробуйте добавить любое значение элемента в массив в указанном выше формате.

Тогда TypeError не произойдет.