我的团队和我一直在使用hubot和vmware pyvmomi开展自动化项目。我一直在尝试修复的核心功能之一是create vm功能。作为一个团队,我们确定我们希望hubot向用户询问一系列问题,然后将数据包发送到我们写的REST API。我正在处理的hubot脚本分支here。我正在处理的具体问题是创建函数正在生成更多响应,因为正在创建更多的vms,然后发送多个数据包。我已在回购的问题选项卡中记录有关问题的信息。请参阅与发送多个数据包相关的问题。
查看使用hubot的源代码记录的问题,我发现其他人也很好奇是否可以将hubot编程为具有对话框(问题950)。所以我决定重构创建函数,以便在我完成后让我提交对话框代码。
重写后(参见标记为refactor-create-vm-function的分支),我遇到了重复的调用问题。当hubot响应create vm消息时,我发布了a screenshot输出。
我认为正在发生的是该功能在被传递时执行一次,然后在实际响应时再次执行。不确定如何防止第一次呼叫发生,或者我甚至可以阻止它。如果无法阻止,那么有关编写hubot对话框的建议是什么?我对javascript和coffeescript建议持开放态度,因为hubot脚本可以是。
相当新的javascript(和coffeescript),所以任何帮助将不胜感激!
答案 0 :(得分:0)
这里的问题不是重复调用该方法,而是尝试在没有自定义的情况下递归。添加对您正在进行递归调用的其他函数范围的引用应该可以解决问题。
(例如_this.askQuestion(...)
代替askQuestion(...)
答案 1 :(得分:0)
经过一些调试代码(感谢@heckj),我们发现问题是由于格式错误的正则表达式传递给.respond
引起的。由于它没有正确格式化,因此总是传递true,因此立即执行其回调。因此,为什么在输入之前和之后调用函数。
我还了解到正则表达式是javascript中的一等公民,所以你不需要单引号围绕它。
话虽如此,这里是正则表达式之前和之后:
{'regex': '(memory\s|mem\s)(\d{1,4})(.*)?'}
{'regex': /(memory\s|mem\s)(\d{1,4})(.*)?/i}