Gem [已解决] 使用 message_bus,有个问题,比如获取到一条通知,居然会提示 7 次

stephen · 2015年09月26日 · 最后由 stephen 回复于 2015年09月26日 · 1976 次阅读

我的代码,生成一条订单,再生成一条通知,js 获取,然后提示,但是居然提示了 7 次。不知道哪里出现问题,以下是我的代码:

$(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 = 500;
  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);
    return document.title = new_title;
  });
});

Tubolinks 开启的时候资源不会释放,on page:change 就是每次换页都重复订阅。

@rei 根据我理解,message_bus 通过 js 访问,在访问的过程中应该没改变 page 吧?不知道我理解正确不!而且 ruby-china 好像也是这样做的!ruby-china 没这种情况出现吗?

我可能搞错了,MessageBus 只会订阅一次,重复订阅会关闭之前的订阅。

建议你用浏览器调试,看订阅通道打开了几次;打印日志看 callback 执行了几次。

@rei 打印日志,显示 callback 在每次新建后,执行了三次,即提示 3 次!

我没用过 MessageBug,你先把它移出 on page:change 如何?

@rei 原来是我检查方向出错了,因为他只出现三次就不会再出现,误导了我,还以为是程序哪里写错了。问题是出在这句MessageBus.callbackInterval = 500;,重复 callback 的时间太短。如果是这样,应该是这个 gem 对于同一条信息,最多 callback 三次。

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