框架中处理异步调用"/>
在bot框架中处理异步调用
我们正在使用通过NodeJS编写的Microsoft Bot Framework配置的Bot。在对话框的执行流程中,我们向用户提供某些信息,然后通过SOAP完成一些服务器处理,并且在下一个瀑布方法开始之前,需要此SOAP响应的结果。
总之,我们有下面的代码:
bot.dialog('changedefaultlogingroupDialog', [
async function (session, args, next) {
wargs[0] = 'change default login group';
var sourceFile = require('./fetchSharePointUserDetail.js');
session.privateConversationData.userSharepointEmail = global.DEVSharepointBotRequestorEmailID;
console.log('\nsession.privateConversationData.userSharepointEmail:'+session.privateConversationData.userSharepointEmail);
var get_SharepointUserId_args = ['get Sharepoint user id', session.privateConversationData.userSharepointEmail];
sourceFile.login(get_SharepointUserId_args);
setTimeout(() => {
global.DEVSharepointTeamcenterUserID = require('./fetchSharePointUserDetail.js').DEVTeamcenterUserId;
console.log('\nglobal.DEVSharepointTeamcenterUserID:'+global.DEVSharepointTeamcenterUserID+'\n');
console.log("Request has been made from directline channel by user id <"+global.DEVSharepointTeamcenterUserID+">");
session.privateConversationData.requestor_id = global.DEVSharepointTeamcenterUserID;
session.privateConversationData.create_ques = session.message.text;
next();
}, 3000);
},
async function (session, result, next) {
Do processing here that is dependent on session.privateConversationData.requestor_id
}
如您从上面的示例中看到的,setTimeout方法等待3秒钟以检索SOAP响应。尽管这在DEV环境中有效,但在我们的PRD环境中却失败了。所以我想知道什么是更合适的方法。在这种情况下,“等待”是否正确?我问这是因为这是在BOT Framework上下文中,并且不确定是否有任何副作用。
请提出建议。
谢谢,帕万。
回答如下:等待是正确的方法。
我不熟悉bot框架,但是我猜想它们的异步部分会在登录期间发生。
await sourceFile.login(get_SharepointUserId_args);
将在异步调用的位置。也可以在fetchSharePointUserDetail.js
中可能有更好的方法将该文件加载为模块,以便您在返回的对象上调用函数,而不是从显然正在执行某些操作的代码中返回变量。
更多推荐
在bot框架中处理异步调用
发布评论