Bot Framework Waterfall中的命名函数?

时间:2018-09-13 18:11:48

标签: javascript node.js botframework

Microsoft Bot Framework here的官方文档显示了使用一系列未命名函数的对话的瀑布模型,如下所示。

bot.dialog('greetings', [
    // Step 1
    function (session) {
        builder.Prompts.text(session, 'Hi! What is your name?');
    },
    // Step 2
    function (session, results) {
        session.endDialog(`Hello ${results.response}!`);
    }
]);

但是可以在这里改用命名函数吗?

bot.dialog('greetings', [
    // Step 1
    greetingPrompt(session),
    // Step 2
    greetingMessage(session, results)
]);

我正在尝试执行此操作,但是session变量的范围存在问题。在命名函数中设置的属性在外部范围中丢失,但是使用未命名函数时,这些属性会保留。有没有办法解决此问题,还是我们不得不使用未命名的函数?看来这是一个更麻烦的解决方案,所以我希望能够清理它并重用一些代码。

1 个答案:

答案 0 :(得分:1)

正如克劳斯所说,即使更改它基本上是简写形式,您也可以使用箭头功能对其进行清理

 function (session) {
     greetingPrompt(session)
 } 

进入此

(session) => greetingPrompt(session)

这是一个实际操作的快速示例:

bot.dialog('/', [
    // Step 1
    (session) => choice(session),
    // Step 2
    (session, results) => responseResult(session, results)
]);

function choice(session){
    builder.Prompts.choice(session, "Which color?", "red|green|blue", { listStyle: builder.ListStyle.button });
}

function responseResult(session,results){
     session.endDialog(`Hello ${results.response.entity}!`);
}