我已经创建了一个用于发送REST请求的库:
var rest = require('restler');
module.exports = {
beginSession: function()
{
var options = {
method: "GET",
query: {begin_session: '1'}};
rest.get('http://countly/i', options).
on('complete', function(data, response){
console.log('Status: ' + response.statusCode);
});
}
};
问题是每次我使用库并且响应调用时,'on complete'被多次调用:第一次使用方法将仅调用'on complete'一次,第二次使用方法将调用'on完成'两次等等......
我做错了什么?
由于 何
答案 0 :(得分:14)
我也在努力解决这个问题。但没有在互联网上找到答案。我终于明白了。这是因为每次调用rest.get()时都会注册的“完整”事件。
我的解决方案是使用.once()而不是.on()。例如:
var rest = require('restler');
rest.get('url_to_fetch').once('complete', function(rtn, rsp){
....blah blah....
});
// refer here http://nodejs.org/api/events.html#events_emitter_once_event_listener
希望这有帮助。
答案 1 :(得分:4)
TL; DR:在restler中出现错误,快速修复直到更新npm:将git master添加到package.json
这里真正的问题是,节点0.10中事件API的某些更改会导致restler重新启动旧事件侦听器,如https://github.com/danwrong/restler/issues/112中所述。
8月底,https://github.com/danwrong/restler/pull/113修正了这个问题。当我们等待正确的npm释放时,它通过使用当前的git头为我工作。
"restler": "git://github.com/danwrong/restler.git#9d455ff14c57ddbe263dbbcd0289d76413bfe07d"
免责声明:我不知道此版本中的内容是什么或者尚未发布的原因。自从上次发布以来,我没有解决问题或差异。
更新2014年8月:从那以后有一个npm版本,它似乎包括修复。
答案 2 :(得分:2)
这是因为您为每次通话附加了一个新事件。尝试先取消绑定事件。
答案 3 :(得分:1)
JSON请求的回调处理程序中发生的异常也可能导致此行为。
请参阅此处的pull请求以获取解决方案: https://github.com/danwrong/restler/pull/94
答案 4 :(得分:1)
请查看v3.2.2。升级你的package.json:
npm install restler --save
它为我解决了这个问题。