开发者问题收集

无法读取机器人框架中未定义错误的属性“长度”

2019-04-06
992

我从 axios 获取请求中获取数据,并将其移动到数组 xyz 。但是当我将 xyz 发送到 step.prompt 时,它会引发此错误:

" [onTurnError]: TypeError: Cannot read property 'length' of undefined"

当我在日志中打印 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 中的元素作为提示发送给用户。

2个回答

对于要使用提示的机器人框架,您可以使用类似下面的内容

提示大小验证示例

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'],
    });
}

我假设,您的第二个参数应该是任何数组/列表,而不是您传递名为“选择任何一个”的字符串,这就是为什么它给出“无法读取未定义的属性‘长度’”的原因,因为它必须尝试访问数组的第一个或第二个元素,并且传递的参数是一个字符串。

提示方法的第二个参数采用提示选项对象,该对象具有以下属性。

在此处输入图像描述

作为参考,您可以在以下文档中详细阅读

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

希望对您有所帮助。

Mohit Verma
2019-04-08
for (var i = 0; i < response.data.length; i++) {
    xyz[i] = `${response.data[i].xzyElement}`;
}

尝试按照上述格式向数组中添加任意元素值。

这样就不会发生 TypeError

Gowtham Chinatalacheruvu
2019-04-08