- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:
在查看源代码时,我在botbuilder.d.ts
中发现了以下内容。看来在 waterfall 里你不需要打电话endDialog
明确吗?
/* You can terminate a waterfall early by either falling through every step of the waterfall using
* calls to `skip()` or simply not starting another prompt or dialog.
*
* __note:__ Waterfalls have a hidden last step which will automatically end the current dialog if
* if you call a prompt or dialog from the last step. This is useful where you have a deep stack of
* dialogs and want a call to [session.endDialog()](/en-us/node/builder/chat-reference/classes/_botbuilder_d_.session.html#enddialog)
* from the last child on the stack to end the entire stack. The close of the last child will trigger
* all of its parents to move to this hidden step which will cascade the close all the way up the stack.
* This is typically a desired behavior but if you want to avoid it or stop it somewhere in the
* middle you'll need to add a step to the end of your waterfall that either does nothing or calls
* something like [session.send()](/en-us/node/builder/chat-reference/classes/_botbuilder_d_.session.html#send)
* which isn't going to advance the waterfall forward.
* @example
* <pre><code>
* var bot = new builder.BotConnectorBot();
* bot.add('/', [
* function (session) {
* builder.Prompts.text(session, "Hi! What's your name?");
* },
* function (session, results) {
* if (results && results.response) {
* // User answered question.
* session.send("Hello %s.", results.response);
* } else {
* // User said never mind.
* session.send("OK. Goodbye.");
* }
* }
* ]);
* </code></pre>
*/
我正在学习 MS Bot Framework 版本 3——这是他们在这里使用的版本。
我遵循 waterfall 如何工作的概念( https://learn.microsoft.com/en-us/azure/bot-service/nodejs/bot-builder-nodejs-dialog-manage-conversation-flow?view=azure-bot-service-3.0 ),但我不明白的一件事是 endDialog
的作用是什么播放。
例如,在我们正在使用的代码中,有一堆单独的对话框,它们都具有以下形式
module.exports = function showTickets() {
this.bot.dialog('/showAllTickets', [
async function showAllTicketsFn(session, args, next) {
this.beginDialog.bind(this, '/showTickets')(session, args, next);
}.bind(this)
]);
};
基本上是一个对话框加载另一个对话框(中间有一些其他代码,例如在数据存储中设置数据)。无处可去endDialog
叫。但在 MS 教程的示例中,每个 waterfall 都以某种形式的 endDialog
结束。 ( endDialog
或 endDialogWithResults
等)。
每个对话框都是用beginDialog
“打开”的吗?当 waterfall 完成时,即当数组中传递给 bot.dialog
的函数时,自动“关闭”自身都跑通了? (在上面的代码中, waterfall 只是一步)。
什么时候需要调用endDialog
明确吗?
感谢您的帮助!
最佳答案
确实,文档应该说您应该结束对话,而不是必须。如果您不显式调用 EndDialog
, waterfall 将自动结束。它更像是一种内置的安全机制,以帮助避免用户陷入困境,忘记在获得结果后调用 enddialog。但在某些情况下,不添加显式 EndDialog
调用也是可以的。更多内容可以在 waterfall here中找到。
一个有效的用例是对话框调用是一个 waterfall ,它只是决定要分支到哪个对话框。一旦分支到给定的对话框,就没有理由添加在该对话框结束后结束的步骤。
但即使在这种情况下,使用 ReplaceDialog
将自己替换为要分支到的对话框可能会更有效。
关于javascript - Microsoft Bot Framework 中是否需要为每个 'endDialog' 调用 'beginDialog' ?什么时候应该调用 'endDialog' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58690001/
编辑: 在查看源代码时,我在botbuilder.d.ts中发现了以下内容。看来在 waterfall 里你不需要打电话endDialog明确吗? /* You can terminate a wat
我想在线程结束时关闭模态对话框。我知道如何使用PostMessage或SendMessage,但为什么不能直接调用EndDialog成员函数?如果我这样做,它会导致 App 异常。 最佳答案 EndD
MS documentation (和 others )“明确”指出: ... Because the normal OnOk and OnCancel member functions of a C
我需要根据其大小动态调整对话框窗口。为此,我采用了以下技术: 我加载它并从 CDialog::OnInitDialog() 处理程序获取它的大小。 如果尺寸太大,我通过调用 CDialog::EndD
嗨,我正在创建 Windows 上下文菜单的模拟。 显示对话框执行以下操作: 使用 CreateDialogIndirectParam 创建一个对话框 运行消息循环: while ( Continue
我在结束任务后关闭模态对话框,在我创建模态对话框的单独线程中: void CmodguiApp::_notify_task_end() { processingDialog->EndDialog(
在MFC中,对于典型的对话框窗口,当MFC调用OnOK()时,这个函数调用了EndDialog()函数,不知何故类析构函数在某个时刻被调用。 假设我在 CDialog 的类中有一个公共(public)
我在人们发布的某个地方读到了机器人文档,如果您替换对话框,然后将先前的对话框存储在堆栈中并存储在某个地方。 现在我尝试按照endDialog()然后replaceDialog()的方式; callRe
我是一名优秀的程序员,十分优秀!