【发布时间】:2019-09-19 01:00:24
【问题描述】:
我有用于查看订单和加快订单的对话框。用户可能希望在 viewOrder 对话框的中间加快速度,然后返回查找更多订单项。我正在检查加速意图作为中断并将对话框推入堆栈。
在对话结束时,我会提示用户是否要返回上一个对话。如果是,我调用 endDialog 将对话框从堆栈中弹出并返回到前一个对话框。这是有效的。如果否,我调用 cancelAllDialogs。我希望这会清除对话框堆栈,但它似乎只取消了当前(加速)对话框,并且仍返回到上一个 viewOrder 对话框。
我的目标是弄清楚如果用户在加速对话框结束时说他们不想继续,如何清除对话框堆栈。
起初我尝试让对话框返回一个 continueDialog 布尔值并从中断函数中取消。但是 await 只等待对话的开始,而不是结果,因此中断函数在用户通过加速对话之前完成。
我更改为仅将新对话框推送到堆栈并处理从加速函数中取消的操作,但 cancelAllDialogs 似乎并没有从这个单独的对话框中取消清除堆栈。
async continueAction(step) {
if (step.result) {
return await step.endDialog();
} else {
await step.context.sendActivity(`OK, please let me know if there is anything else I can do for you.`);
return await step.cancelAllDialogs();
}
}
请注意,“step”只是我的对话上下文的名称,您可以将其命名为“context”、“stepContext”、“dc”、“innerDc”等。
step.result.value 是 ConfirmPrompt 的结果,我在选择“否”时正确地到达了 else 块。我希望 cancelAllDialogs 清除堆栈,但它似乎只取消活动对话框。
【问题讨论】:
标签: botframework