Jus*_*ang 1 azure node.js botframework
我在Node.js上使用Microsoft Bot Framework.我有一个如下所示的配置文件.
{
"server": {
"port": 3978
},
"dialogs": {
"default": {
"text": "This is some sample text.",
"actions": [
{
"title": "Button 1",
"value": "Action 1"
},
{
"title": "Button 2",
"value": "Action 2"
}
]
},
"hello": {
"text": "hello",
"matches": "^hello$"
},
"asdf": {
"text": "asdf",
"matches": "^asdf$"
},
"goodbye": {
"text": "goodbye",
"matches": "^goodbye$"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想使用for循环来读取对话框并创建它们,以便它们响应text值并具有值的触发器操作matches.
例如,机器人响应hello输入hello,asdf输入asdf和goodbye输入goodbye.
我试图解决这个问题的函数看起来像这样.
var create = function(bot, _config) {
var config = JSON.parse(JSON.stringify(_config));
// Create dialogs from config
var keys = Object.keys(config.dialogs);
for(var i = 0; i < keys.length; i++) {
var dialogName = keys[i];
var dialog = config.dialogs[dialogName];
// Skip over default dialog
if(dialogName == "default") continue;
// Create other dialogs
bot.dialog(dialogName, function(session) {
var text = dialog.text;
session.endDialog(text);
}).triggerAction({
matches: new RegExp(dialog.matches, "i")
});
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行此,机器人与响应goodbye到输入hello,asdf以及goodbye.但是,控制台显示正确的对话框应该被调用.即使我hello通过使用调用对话框session.beginDialog('hello');,机器人也会返回goodbye.
什么似乎导致这里的问题?
这是varjavascript中常见的"陷阱" .替换var为let应该解决您的问题.
问题类似于
for (var i = 0; i < 10; i++) {
setTimeout(function() { console.log(i); }, 100 * i);
}Run Code Online (Sandbox Code Playgroud)
根本原因是var函数作用域并且let是块作用域的.有关详细信息,请参阅https://www.typescriptlang.org/docs/handbook/variable-declarations.html.
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |