Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js BotFramework:承诺消费函数中的session.dialogData出现问题_Node.js_Azure_Botframework - Fatal编程技术网

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
属性的神奇之处吗?我已经仔细阅读了文档,但没有找到答案。