Node.js BotFramework:承诺消费函数中的session.dialogData出现问题
我正在努力解决与分配Node.js BotFramework:承诺消费函数中的session.dialogData出现问题,node.js,azure,botframework,Node.js,Azure,Botframework,我正在努力解决与分配会话相关的问题。dialogData属性位于.then()函数中。当一些数据在MongoDB中以瀑布式步骤保存时,我需要实现业务逻辑,函数返回插入文档的ObjectID,然后将该值保存在会话的属性中。dialogData。然后我需要在下一步中使用session.dialogData属性的值。问题是,当我在第二步尝试使用此属性时,此属性将变成未定义的 我做错了什么?这是我第一次使用BotFramework。下面是代码示例: function (session, results)
会话相关的问题。dialogData
属性位于.then()
函数中。当一些数据在MongoDB中以瀑布式步骤保存时,我需要实现业务逻辑,函数返回插入文档的ObjectID,然后将该值保存在会话的属性中。dialogData。然后我需要在下一步中使用session.dialogData属性的值。问题是,当我在第二步尝试使用此属性时,此属性将变成未定义的
我做错了什么?这是我第一次使用BotFramework。下面是代码示例:
function (session, results) {
session.dialogData.phoneNumber = results.response;
session.sendTyping();
// Function with Promise which saves customer data in MongoDB and resolve ObjectId of inserted document
saveCustomerData (customerDataObj)
.then(function (objectid) {
console.log(objectid.toString());
session.dialogData.insCustomerObjId = objectid.toString(); // value is assigned successfully
}
);
},
function (session, results) {
session.dialogData.insCustomerObjId = results.response.entity;
console.log (session.dialogData.insCustomerObjId) // <-- !!! undefined !!!
// some logic here
}
功能(会话、结果){
session.dialogData.phoneNumber=results.response;
session.sendTyping();
//Promise函数,用于在MongoDB中保存客户数据并解析插入文档的ObjectId
saveCustomerData(customerDataObj)
.then(函数(objectid){
log(objectid.toString());
session.dialogData.insCustomerObjId=objectid.toString();//已成功分配值
}
);
},
功能(会话、结果){
session.dialogData.insCustomerObjId=results.response.entity;
console.log(session.dialogData.insCustomerObjId)/您需要控制瀑布步骤的推进,这是通过在瀑布步骤函数中包含一个next回调参数来完成的。调用该回调时,瀑布将进入下一步
有关更多信息,请查看
以下代码片段应该可以解决您的问题:
// pass an extra next callback parameter
function (session, results, next) {
session.dialogData.phoneNumber = results.response;
session.sendTyping();
saveCustomerData (customerDataObj)
.then(function (objectid) {
console.log(objectid.toString());
session.dialogData.insCustomerObjId = objectid.toString();
next(); // call the next callback, indicating go to the next step
}
);
},
function (session, results) {
session.dialogData.insCustomerObjId = results.response.entity;
console.log (session.dialogData.insCustomerObjId);
}
谢谢!这对我解决问题很有帮助。但是你能解释一下next()
和保留session.dialogData
属性的神奇之处吗?我已经仔细阅读了文档,但没有找到答案。