WEB开发网
开发学院网页设计JavaScript 写个 JavaScript 异步调用框架 (Part 4 - 链式调用... 阅读

写个 JavaScript 异步调用框架 (Part 4 - 链式调用)

 2010-09-14 13:45:22 来源:WEB开发网   
核心提示:我们已经实现了一个简单的异步调用框架,然而还有一些美中不足,写个 JavaScript 异步调用框架 (Part 4 - 链式调用),那就是顺序执行的异步函数需要用嵌套的方式来声明,现实开发中,同样的逻辑必须变成这样子:firstAsyncOperation(initialArgument).addCallback(f

我们已经实现了一个简单的异步调用框架,然而还有一些美中不足,那就是顺序执行的异步函数需要用嵌套的方式来声明。

现实开发中,要按顺序执行一系列的同步异步操作又是很常见的。还是用百度Hi网页版中的例子,我们先要异步获取联系人列表,然后再异步获取每一个联系人的具体信息,而且后者是分页获取的,每次请求发送10个联系人的名称然后取回对应的具体信息。这就是多个需要顺序执行的异步请求。

为此,我们需要设计一种新的操作方式来优化代码可读性,让顺序异步操作代码看起来和传统的顺序同步操作代码一样优雅。

传统做法

大多数程序员都能够很好的理解顺序执行的代码,例如这样子的:

var firstResult = firstOperation(initialArgument);
var secondResult = secondOperation(firstResult);
var finalResult = thirdOperation(secondResult);
alert(finalResult);

其中先执行的函数为后执行的函数提供所需的数据。然而使用我们的异步调用框架后,同样的逻辑必须变成这样子:

firstAsyncOperation(initialArgument).addCallback(function(firstResult) {
  secondAsyncOperation(firstResult).addCallback(function(secondResult) {
    thirdAsyncOperation(secondResult).addCallback(function(finalResult) { 
      alert(finalResult);
    });
  });
});

链式写法

我认为上面的代码实在是太不美观了,并且希望能够改造为jQuery风格的链式写法。为此,我们先构造一个用例:

Cat.Async.Operation.go(initialArgument)
  .next(firstAsyncOperation)
  .next(secondAsyncOperation)
  .next(thirdAsyncOperation)
  .next(function(finalResult) { alert(finalResult); })

1 2 3  下一页

Tags:JavaScript 异步 调用

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