9

我创建了一个用于发送 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);
        });
  }
};

问题是每次我使用库并响应调用时,都会多次调用“完成时”:第一次使用方法只会调用一次“完成时”,第二次使用方法将调用“完成时”两次等等....

我究竟做错了什么?

谢谢何塞

4

5 回答 5

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

希望这会有所帮助。

于 2013-05-23T11:10:27.600 回答
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 head 对我有用。

"restler": "git://github.com/danwrong/restler.git#9d455ff14c57ddbe263dbbcd0289d76413bfe07d"

免责声明:我不知道这个版本有什么问题或者为什么还没有发布。自上次发布以来,我没有仔细研究问题或差异来找出答案。

2014 年 8 月更新:从那时起有一个 npm 版本,它似乎包含修复。

于 2013-10-02T08:30:49.713 回答
2

这是因为您为每个呼叫附加了一个新事件。尝试先解除绑定事件。

于 2013-04-16T22:01:57.807 回答
1

请查看 v3.2.2。升级你的 package.json:

npm install restler --save

它为我解决了这个问题。

于 2014-11-19T12:10:39.607 回答
1

JSON 请求的回调处理程序中发生的异常也可能导致此行为。

请参阅此处的拉取请求以获取解决方案: https ://github.com/danwrong/restler/pull/94

于 2013-04-25T05:27:20.917 回答