Именованные функции в водопаде bot framework?

Официальная документация для Microsoft Bot Framework здесь показывает водопадную модель диалога с использованием ряда безымянных функций, как показано ниже.

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. Свойства, которые устанавливаются в названных функциях, теряются во внешней области, но при использовании безымянных функций эти свойства остаются. Есть ли способ обойти это или мы вынуждены использовать безымянные функции? Это кажется более беспорядочным решением, поэтому я хотел бы иметь возможность очистить его и повторно использовать некоторый код.

Во всяком случае, s => greeingPrompt(s) должен позволять вам вставлять функцию, вызывающую другую функцию, с небольшой перегрузкой синтаксиса.

Claus Jørgensen 13.09.2018 20:14
1
1
51
1

Ответы 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}!`);
}

Другие вопросы по теме