Javascript 在microsoft bot framework中,如何等待一个函数执行后再执行第二个函数?

Javascript 在microsoft bot framework中,如何等待一个函数执行后再执行第二个函数?,javascript,node.js,botframework,Javascript,Node.js,Botframework,我正在调用一个函数,该函数处理用户输入消息,然后在microsoft bot framework的node.js SDK中相应地发送响应。下面是一个场景:当bot接收到来自用户的消息时,我正在调用一个函数processMessage,该函数需要一些时间来执行processedResult是执行processMessage后获得的结果。由于bot响应过早,因此它正在发送未定义的值。如何确保在processMessage的执行完成之前不执行瀑布中的下一步?这是我的密码: var connector

我正在调用一个函数,该函数处理用户输入消息,然后在microsoft bot framework的node.js SDK中相应地发送响应。下面是一个场景:当bot接收到来自用户的消息时,我正在调用一个函数
processMessage
,该函数需要一些时间来执行
processedResult
是执行
processMessage
后获得的结果。由于bot响应过早,因此它正在发送未定义的值。如何确保在
processMessage
的执行完成之前不执行瀑布中的下一步?这是我的密码:

var connector = new builder.ConsoleConnector().listen();
var bot = new builder.UniversalBot(connector);

bot.dialog('/', [
    function (session) {
        console.log('step1')
        processMessage(session.message.text);
    },
    function(session) {
        console.log('step3')
        session.send(processedResult);
    }
]);

console.log('step2')
processMessage
的定义中。日志的顺序是步骤1、步骤3、步骤2。

您的
processMessage
函数需要返回一个承诺。对于,您只需执行
。然后在那里执行步骤3的日志

类似于以下内容(我在这里编写了代码,因此可能包含一些小错误)

承诺是
Node.js
/
Javascript
世界中的常见模式。例如,您可能想阅读有关它们的文章


在中,您可以看到这种方法是如何使用的:以及

您的
processMessage
函数需要返回一个承诺。对于,您只需执行
。然后在那里执行步骤3的日志

类似于以下内容(我在这里编写了代码,因此可能包含一些小错误)

承诺是
Node.js
/
Javascript
世界中的常见模式。例如,您可能想阅读有关它们的文章


在中,您可以看到这种方法是如何使用的:以及

另一种方法是回调DP(您可以在回调返回时调用next或prompt):


回调DP的替代方法(从回调返回时,您可以调用next或prompt):


processMessage
是否接受回调?否。但如果回调有帮助,我会添加它。如果有,请解释使用回调的解决方案。
processMessage
是否接受回调?否。但是如果回调有帮助,我会添加它。如果有,请使用回调解释解决方案。
function processMessage(text) {
 return new Promise(resolve, reject) => {
    console.log(text);
    var processedResult = 'myProcessedResult';
    resolve(processedResult);
 }
}

bot.dialog('/', [
    function (session) {
        console.log('step1')
        processMessage(session.message.text).then(processedResult) => {
         console.log('step3')
         session.send(processedResult);
    }
]);
var processMessage = (callback) => {
    request('...', (a, b, b) => {
       callback(null, 'ok');
    });
}

bot.dialog('/', [
    function (session, next) {
        console.log('step1')
        processMessage(session.message.text, (err, result) => {
            session.send(result);
            next();
        });
    },
    function(session, next) {
        console.log('step3')
        processMessage(session.message.text, (err, result) => {
            builder.Prompts.confirm(session, result);
        });
    }
]);