JavaScipt 源码解析 异步

Posted 黄银

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScipt 源码解析 异步相关的知识,希望对你有一定的参考价值。

我们常见的异步操作:

定时器setTimeout
postmessage
WebWorkor
CSS3 动画
XMLHttpRequest
html5的本地数据
等等…

javascript要求在与服务器进行交互时要用异步通信,如同AJAX一样。因为是异步模型,所以在调用Transaction游览器提供的本地数据接口时候类似AJAX(这里我是假设),浏览器自己有内部的XHR方法异步处理,但是此时的JS代码还是会同步往下执行,其实就是无阻塞的代码。

问题:因为无阻塞,代码在发送AJAX这个请求后会继续执行,那么后续的操作如果依赖这个数据的就会出错了,所以这里就需要等待AJAX返回,才能执行后续操作。

Deferred

Deferred提供了一个抽象的非阻塞的解决方案(如异步请求的响应),他创建一个promise对象,其目的是在未来某个时间点返回一个响应,简单来说就是一个异步/同步回调函数的处理方案。

$.Deferred在jQuery代码内部有四个模块被使用,分别是promise方法,DOM ready,Ajax模块,动画模块。

Ajax的改造

传统的jQuery的Ajax操作的传统写法(1.5之前):

$.ajax({

  url:"",

  success:function(){alert("success")},

  error:function(){alert("fail")}

});

$.ajax()接受一个对象参数,这个对象包含两个方法,success方法,指定操作成功后的回调函数,error方法指定操作失败后的回调函数。

1.5版本后通过新的Deferred引入

$.ajax("").done(function(){alert("success")}).fail(function(){alert("fail")});

 

以上是关于JavaScipt 源码解析 异步的主要内容,如果未能解决你的问题,请参考以下文章

JavaScipt 中的事件循环机制,以及微任务 和宏任务的概念

Android 常用开源框架源码解析 系列 Rxjava 异步框架

像素缓冲区对象(PBO)的异步Read-Back 源码解析

android源码解析之-->异步任务AsyncTask

JavaScipt设计模式初探-代理模式 虚拟代理

Redux异步解决方案之Redux-Thunk原理及源码解析