【问题标题】:hubot response callback called twicehubot 响应回调调用了两次
【发布时间】:2016-04-03 19:53:05
【问题描述】:

背景

我和我的团队一直在使用 hubot 和 vmware pyvmomi 开展一个自动化项目。我一直试图修复的核心功能之一是 create vm 功能。作为一个团队,我们决定让hubot问用户一系列问题,然后发送一个数据包到我们写的REST API。我正在处理的hubot 脚本分支位于here。我正在处理的具体问题是 create 函数正在生成更多响应,因为正在创建更多虚拟机,然后发送多个数据包。我已经在 repo 的 issue 选项卡中记录了有关该问题的信息。查看与发送多个数据包相关的问题。

查看使用 hubot 的源代码记录的问题,我发现其他人也很好奇是否可以将 hubot 编程为具有对话框(问题 950)。所以我决定重构 create 函数,让我在完成后贡献对话代码。

问题

重写后(请参阅标记为 refactor-create-vm-function 的分支),我遇到了重复调用问题。当hubot 响应create vm 消息时,我已经发布了a screenshot 的输出。

我认为正在发生的是该函数在传递时执行一次,然后在它实际响应时再次执行。不知道如何防止第一次通话发生,或者我什至可以防止它。如果无法避免,关于编写 hubot 对话框有什么建议?我对javascript和coffeescript的建议都持开放态度,因为hubot脚本都可以。

对 javascript(和咖啡脚本)非常陌生,因此我们将不胜感激!

【问题讨论】:

标签: javascript coffeescript hubot


【解决方案1】:

这里的问题不是该方法被重复调用,而是它试图在没有定义自身的情况下进行递归。添加对您进行递归调用的其他函数范围的引用应该可以解决问题。

(例如 _this.askQuestion(...) 而不是 askQuestion(...)

【讨论】:

    【解决方案2】:

    经过更多的调试代码(感谢@heckj),我们发现问题是由于传递给.respond 的格式错误的正则表达式引起的。由于它的格式不正确,它总是传递 true 并因此立即执行它的回调。因此,为什么在输入之前和之后调用该函数。

    我还了解到,正则表达式是 javascript 中的一等公民,因此您不需要在其周围加上单引号。

    话虽如此,这里是前后的正则表达式:

    之前

    {'regex': '(memory\s|mem\s)(\d{1,4})(.*)?'}

    之后

    {'regex': /(memory\s|mem\s)(\d{1,4})(.*)?/i}

    【讨论】:

      猜你喜欢
      • 2013-05-21
      • 1970-01-01
      • 2022-10-18
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      • 2020-11-13
      • 1970-01-01
      相关资源
      最近更新 更多