javascript - 如何在微软机器人框架中等待一个函数执行后再执行第二个函数?

标签 javascript node.js botframework

我正在调用一个函数,该函数处理用户输入消息,然后在微软机器人框架的node.js SDK中发送相应的响应。以下是场景:当机器人收到来自用户的消息时,我调用一个函数 processMessage ,该函数需要一些时间来执行。 processedResult是执行processMessage后得到的结果。由于机器人过早响应,因此它发送了未定义的值。如何确保在 processMessage 执行完成之前不会执行 waterfall 中的下一步?这是我的代码:

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 的定义中。日志的顺序是step1、step3、step2。

最佳答案

您的processMessage函数需要返回一个Promise。您可以在那里执行 .then 来记录第 3 步的日志。

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

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

Promises 是 Node.js/Javascript 世界中的常见模式。您可能想阅读有关它们的信息,例如 here .

this sample您可以看到如何使用这种方法:the callerfunction returning a Promise

关于javascript - 如何在微软机器人框架中等待一个函数执行后再执行第二个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41862730/

相关文章:

javascript - JSDOM:删除一次嵌套的 block 引用但留下 2+ 嵌套的 block 引用

node.js - 将curl请求转换为NodeJS请求

node.js - 如何为机器人响应添加延迟,使其在 Microsoft Bot Framework Node.js 中感觉更真实?

node.js - builder.Prompts.text 在远程托管后无法正常工作

Javascript:跨浏览器的无服务器文件上传和下载

javascript - Ajax 调用中的数据长度

node.js - 在 Node.js 中禁用 HTTP Keep-Alive

javascript - 获取特定 div 的子元素中输入字段的值

JavaScript 仅接受 0 到 255 范围内的数字

c# - 在 Microsoft bot 框架中对用户进行身份验证