WEB开发网
开发学院网页设计JavaScript 写个 JavaScript 异步调用框架 (Part 6 - 实例 &a... 阅读

写个 JavaScript 异步调用框架 (Part 6 - 实例 & 模式)

 2010-09-14 13:47:36 来源:WEB开发网   
核心提示: 首先我们看看较为基础的get方法怎么写:function get(name) { return Ajax.get("/friend", "name=" + encodeURIComponent(name));}就这么简单?对的,假如服务器端API返回

首先我们看看较为基础的get方法怎么写:

function get(name) {
  return Ajax.get("/friend", "name=" + encodeURIComponent(name));
}

就这么简单?对的,假如服务器端API返回的JSON结构正好就是你要的好友对象结构的话。如果JSON结构和好友对象结构是异构的,或许你还要加点代码来把JSON映射为对象:

function get(name) {
  var operation = new Async.Operation()
  Ajax.get("/friend", "name=" + encodeURIComponent(name))
    .addCallback(function(json) {
      operation.yield(createFriendFromJson(json));
    });
  return operation;
}

Ajax队列

接下来我们要编写的是getAll方法。因为friendlist接口只返回好友名称列表,因此在取得这份列表后我们还要逐一调用get方法获取具体的好友对象。考虑到在同时进行多个friend接口调用可能触发服务器的防攻击策略,导致被关小黑屋一段时间,所以对friend接口的调用必须排队。

function getAll(){
  var operation = new Async.Operation();
  var friends = [];
  var chain = Async.chain();
  Ajax.get("/friendlist", "")
    .addCallback(function(json) {
      for (var i = 0; i < json.length; i++) {
        chain.next(function() {
          return get(json.shift())
            .addCallback(function(friend) { friends.push(friend); });
        });
      }
      chain
        .next(function() { operation.yield(friends); })
        .go();
    })
  return operation;
}

Tags:JavaScript 异步 调用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接