Gem 使用 message_bus 过程中,如新建订单获取到一条通知,居然会提示多次,问题出现在 message_bus.js 的回调函数调用了多次,如何解决?

stephen · 2015年09月29日 · 最后由 stephen 回复于 2015年10月01日 · 2061 次阅读

生成一条订单,再生成一条通知,js 获取,然后提示,但是居然提示了 7 次。 除了这个问题,其他一切正常,也没错误信息。 经过自己测试,问题出现在下面代码:

message-bus.js  MessageBus.subscribe这个回调函数,会执行多次

请教下如何解决? 我的代码如下:

$(document).on('page:change',  function() {
  NProgress.done();

  MessageBus.start(); // call once at startup
  // how often do you want the callback to fire in ms
  MessageBus.callbackInterval = 1000;
  MessageBus.subscribe("/notifications_count/" + App.access_token, function(data){
    // data shipped from server
    var div, link, new_title, span, url;
    span = $(".notification-count span");
    link = $(".notification-count a");
    new_title = document.title.replace(/^\(\d+\) /, '');
    if (data.count > 0) {
      span.show();
      new_title = "(" + data.count + ") " + new_title;

      link.addClass("new");

      $.notify({
        title: "<strong>" + data.title + "</strong> ",
        message: "您有新订单(" + data.content + "),请赶快处理 <a href=\"" + data.content_path + "\">点击这里</a>"
      },{
        delay: 10000
      });
    } else {
      span.hide();
      link.removeClass("new");
    }
    span.text(data.count);
    document.title = new_title;
  });
});

请问如何解决?

贴出调用的代码和 log

@fumesy 贴了代码,除了这个问题,其他一切正常,也没错误信息,测试只是把重复执行的地方定位

你的 server 使用 webrick?

@fumesy 使用 puma,也按官方加了

# path/to/your/config/puma.rb
on_worker_boot do
  MessageBus.after_fork
end

不理解你为什么不接着上贴问,新开一个帖子上个帖子讨论的线索就丢失了。

@rei 一时习惯了 github 的 close issue,不好意思,我转回那贴,现在好像不准删除自己的贴了

@huacnlee @rei 这个问题好像暂时解决,解决办法是把代码从$(document).on 'page:change', ->放在了$(document).on 'ready', ->,但是为什么 ruby-china 放在$(document).on 'page:change', ->又没出现问题呢?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号