Javascript hubot响应回调调用了两次 背景

Javascript hubot响应回调调用了两次 背景,javascript,coffeescript,hubot,Javascript,Coffeescript,Hubot,我的团队和我一直在使用hubot和vmware pyvmomi进行一个自动化项目。我一直试图修复的核心函数之一是createvm函数。作为一个团队,我们决定让hubot向用户询问一系列问题,然后将一个数据包发送给我们编写的。找到了我正在处理的hubot脚本的分支。我正在研究的具体问题是,创建函数在创建更多虚拟机时生成更多响应,然后发送多个数据包。我已在回购协议的“问题”选项卡中记录了有关问题的信息。请参阅与发送多个数据包相关的问题 通过查看hubot源代码记录的问题,我发现其他人也很好奇hubo

我的团队和我一直在使用hubot和vmware pyvmomi进行一个自动化项目。我一直试图修复的核心函数之一是createvm函数。作为一个团队,我们决定让hubot向用户询问一系列问题,然后将一个数据包发送给我们编写的。找到了我正在处理的hubot脚本的分支。我正在研究的具体问题是,创建函数在创建更多虚拟机时生成更多响应,然后发送多个数据包。我已在回购协议的“问题”选项卡中记录了有关问题的信息。请参阅与发送多个数据包相关的问题

通过查看hubot源代码记录的问题,我发现其他人也很好奇hubot是否可以被编程为拥有一个对话框(问题950)。因此,我决定重构create函数,以便在完成后能够返回对话框代码

问题 在重写之后(请参阅标记为重构创建vm函数的分支),我遇到了重复调用问题。我已经发布了hubot响应CreateVM消息时的输出

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


对于javascript(以及咖啡脚本)来说,这是一个非常新的概念,所以任何帮助都将不胜感激

这里的问题不是该方法被重复调用,而是它试图在没有自身定义的情况下递归。添加对进行递归调用的另一个函数作用域的引用应该可以做到这一点


(例如,
\u this.askQuestion(…)
而不是
askQuestion(…)

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


(例如,
\u这个.askQuestion(…)
而不是
askQuestion(…)

在调试代码之后(谢谢@heckj),我们发现问题是由于将格式不正确的正则表达式传递到
.respond
。由于它的格式不正确,它总是传递true,因此会立即执行回调。因此,在输入之前和之后都会调用该函数

我还了解到,正则表达式在javascript中是一流的公民,所以不需要用单引号括起来

话虽如此,以下是前后的正则表达式:

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

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

在调试代码之后(谢谢@heckj),我们发现问题是由于将格式不正确的正则表达式传递到
.respond
。由于它的格式不正确,它总是传递true,因此会立即执行回调。因此,在输入之前和之后都会调用该函数

我还了解到,正则表达式在javascript中是一流的公民,所以不需要用单引号括起来

话虽如此,以下是前后的正则表达式:

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

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

您查看过该链接吗!感谢链接。您查看过该链接吗!感谢链接。