JavaScript如何异步调用框架

这篇文章主要讲解了“JavaScript如何异步调用框架”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript如何异步调用框架”吧!

阿图什ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!

调用入口

链式调用存在Async.go方法和Async.chain方法两个入口,这两个入口本质上是一致的,只是Async.chain方法在调用时先不提供初始参数,而Async.go方法在调用时提供了初始参数并启动异步调用链。

Async.chain = function() {    var chain = new Async.Operation({ chain: true });    return chain;  };   Async.go = function(initialArgument) {    return Async.chain().go(initialArgument);  }

在这里我们可以看到,链式调用本身也是一个Async.Operation,链式调用所需的go方法和next方法都是在Async.Operation上面做的扩展,并且这个扩展不会很难,这将在下一小节说明。

扩展方法

我们都知道,通过addCallback方法添加的回调函数是会被逐一执行的,至少同步函数如此,因此我们可以用Async.Operation的这一特性来维护异步调用队列,前提是我们为它加上对异步调用进行队列的支持。

对于异步调用进行队列的支持,我们稍后再来处理,首先我们利用现成的addCallback方法和yield方法扩展出go方法和next方法。

this.go = function(initialArgument) {    return this.yield(initialArgument);  }   this.next = function(nextFunction) {    return this.addCallback(nextFunction);  };

实际上,go方法和next方法直接调用的正是yield方法和addCallback方法。go方法的语义与yield方法一样,传递一个参数给Async.Operation实例,并且启动调用队列。同时,next方法的语义和addCallback方法,添加一个调用到队列的末端。

异步队列

如何才能让原本仅支持同步的队列变得也支持异步?这需要检测队列中的每一个调用的返回,如果返回类型为Async.Operation,我们知道是JavaScript异步调用,从而使用特殊的方法等它执行完后再执行下去。

callbackResult = callback(self.result);  self.result = callbackResult;  if (callbackResult && callbackResult instanceof Async.Operation) {    innerChain = Async.chain();    while (callbackQueue.length > 0) {      innerChain.next(callbackQueue.shift());    }    innerChain.next(function(result) {      self.result = result;      self.state = "completed";      self.completed = true;      return result;    });    callbackResult.addCallback(function(result) {      self.result = result;      innerChain.go(result);    });  }

如果调用返回了一个Async.Operation实例,我们就利用它自身的addCallback方法帮我们执行队列中余下的调用。准确来说,是我们构造了一个新的调用链,把队列余下的调用都转移到新的调用链上,然后让当前异步调用在回调中启动这个新的调用链。

此外还有一些地方我们需要略作修改,以兼容新的异步调用队列的。例如result、state、completed的状态变更,在链式调用中是有所不同的。

感谢各位的阅读,以上就是“JavaScript如何异步调用框架”的内容了,经过本文的学习后,相信大家对JavaScript如何异步调用框架这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


分享文章:JavaScript如何异步调用框架
浏览路径:http://hbruida.cn/article/pgecdj.html