我正在研究松弛机器人,我遇到了好奇的问题。我有一个模块使用phantomJS(通过SpookyJS& CasperJS)在网页上抓取网页。我编写了这个模块并测试了它从命令行手动运行它。它运作良好。但后来我添加了slackbots
npm模块,该模块抽象了Slack实时API,并创建了一个带有bot类的模块。这个bot模块需要我的模块使用抓取代码(phantomJS)并在消息事件触发时调用它的函数:
var getAnswer = require('./getAnswer');
myBot.prototype._onMessage = function (message) {
if (this._isChatMessage(message) &&
this._isChannelConversation(message) &&
this._isMentioningMe(message)) {
this._reply(message);
}
};
this._reply
基本上只是调用getAnswer(originalMessage.text)
然后调用self.postMessageToChannel(channel.name, reply, {as_user: true});
getAnswer返回一个承诺,但它永远不会得到满足。我让CasperJS成为verbose
并且看到
[info] [phantom] Starting...
一切都挂了......
我不知道,如何解决这个问题。我想这是因为slackbots
模块在我调用Bot.prototype.run
时建立了websocket连接。有什么建议吗?
答案 0 :(得分:0)
正如我所说,我使用Spooky来生成孩子CasperJS过程。我去了Spooky文档页面并阅读:
具体来说,每个Spooky实例都会生成一个子Casper进程 运行引导脚本。引导脚本设置JSON-RPC 侦听来自父Spooky实例的命令的服务器 传输(HTTP或stdio)。该脚本还设置了JSON-RPC 通过stdout将事件发送到父Spooky实例的客户端。
我使用http
作为传输但它不起作用,因此我将其更改为stdio并且它有所帮助。如果有人能解释为什么有帮助,我会很感激吗?