Javascript 在microsoft bot framework中,如何等待一个函数执行后再执行第二个函数?
我正在调用一个函数,该函数处理用户输入消息,然后在microsoft bot framework的node.js SDK中相应地发送响应。下面是一个场景:当bot接收到来自用户的消息时,我正在调用一个函数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
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);
});
}
]);