【问题标题】:Multiple responses on node.js restler callnode.js restler 调用上的多个响应
【发布时间】:2013-04-16 21:51:44
【问题描述】:

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

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

我做错了什么?

谢谢 何塞

【问题讨论】:

    标签: javascript node.js restler


    【解决方案1】:

    我也在努力解决这个问题。但在互联网上没有找到答案。不过我终于弄明白了。这是由 每次调用 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
    

    希望这会有所帮助。

    【讨论】:

    • 我希望这会因并发请求而中断。
    【解决方案2】:

    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 版本,它似乎包含修复。

    【讨论】:

      【解决方案3】:

      这是因为您为每次通话附加了一个新事件。先尝试解绑事件。

      【讨论】:

      • 谢谢阿列科!。我已经通过删除回调函数上的侦听器来实现您的建议:var restCall = rest.get(countlyUrl , options).on('complete', callback); function callback(data, response) {console.log('Status: ' + response.statusCode);restCall.removeListener('complete', callback);};。但是现在我对如何将每个请求与每个回调进行匹配有疑问。如果我对同时请求有不同的回调怎么办?
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        npm install restler --save
        

        它为我解决了这个问题。

        【讨论】:

        • @arco444 你到底想让我说什么?我说了他需要听的!这是一个错误!将你的 npm packge 升级到 v3.2.2,你会没事的!
        • 我这样说是因为我的代码与这个问题的作者几乎相同,升级 restler 版本为我解决了这个问题。
        • @arco444 我只为你编辑了我的原始答案:*
        • 天啊...低质量谁说的?你?我有 100% 的把握,有问题的人会欣赏我的回答。
        • 我不知道刚刚进行了什么讨论,但 Igor 是正确的,因为这是一个可怕的 Restler 错误。我花了很多时间调试这个。从 2.0.1 升级到 3.2.2 修复了我遇到的内存泄漏和多次调用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-28
        • 1970-01-01
        相关资源
        最近更新 更多