AJAX和autobahnjs

时间:2013-12-11 03:28:31

标签: javascript ajax autobahn

我正在通过来自服务器的AJAX调用显示最初请求的web browsert中的项目列表,然后通过收听autobahnjs订阅(接收更改通知)进行更新。

我的一些项目(作业列表,有时在几百毫秒内完成,有时仅在很长一段时间后完成),可能会在加载网页时更新。这很有可能,因为在提交新作业后立即显示作业列表。

我的问题是,我不知道订阅何时处于活动状态,因此有时在我收到AJAX响应之后但在订阅变为活动之前更改了我的项目列表(导致项目永远不会看到更新)

在AJAX调用之前启动订阅只能部分解决问题,因为现在项目列表可以覆盖之前通过订阅发生的更改。这样做还需要找出订阅何时生效。

1 个答案:

答案 0 :(得分:1)

基于Autobahn的堆栈(单服务器节点)运行{em} RPC和PubSub WAMP,一个选项是这样的:

var listInitialized = false;

session.subscribe("http://myapp.com/onListChange",
   function (topic, event) {
      if (listInitialized) {
         // update list
      }
   }
});

session.call("http://myapp.com/getList").then(
   function (res) {
      // initial fill of list
      listInitialized = true;
   }
);

由于subscribecall都在单个WAMP连接上运行(并且该连接是有序的WebSocket / TCP传输),因此高速公路服务器将设置订阅并在呼叫之前传递事件甚至处理。该订阅可能会产生在调用返回之前到达的事件,但这些事件将通过标志被忽略。稍后,当调用返回并处理结果时,客户端将处理后续事件。