我正在调用一个函数,该函数处理用户输入消息,然后在微软机器人框架的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 caller和 function returning a Promise 。
关于javascript - 如何在微软机器人框架中等待一个函数执行后再执行第二个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41862730/