一、异步操作:
1、$ .ajax(url, {success: function(){}})是等请求成功后调用回调
2、$(function(){})是等页面加载完后调用
3、node异步操作比较多,高并发无阻塞
异步操作回调多的问题:
- 嵌套层次很深,难以维护
- 无法正常return 和throw错误
- 无法正常检索堆栈信息
- 多个回调之间难以建立联系
二、promise
1、先初始化一个实例,初始时传入一个函数参数作为执行器。执行器的参数分别是:resolve – 数据处理完成时调用, reject – 数据处理失败时调用.这两个函数调用完后会改变promise实例的状态。状态改变之后会调用then函数里得方法,then方法也有两个函数作为对应的参数,若promise执行成功,会执行then的第一个参数函数,若是promise执行失败,则执行第二个函数。
new Promise(function(resolve,reject){
resolve();//异步数据处理成功后执行
reject();//异步数据处理失败后执行
}).then(function A(){
//成功,做下一步
},
function B(){
//失败,做相应处理
})
2、Promise三个状态
pending: 初始状态
fulfilled: 操作成功
rejected: 操作失败
3、多个then函数的时候,每个then都会产生一个新的promise,已经完成的promise再使用then依然可以获得值,这是promise的队列特性
4、promise里的then可以返回新的promise或者其他值,如果没有return 新的promise实例,则会执行下一个 then.如果没有返回任何值,则会立刻执行下一个then.
5、错误处理
方法1 :使用reject并在then 的第二个参数里执行错误处理
方法2: throw new Error并且使用catch执行错误处理,推荐第二个,一般在队列最后都加上catch。
5、promise.all()
接受数组作为参数,数组中的值可以是promise实例,全部promise完成时他返回,若有一个失败,则失败,返回的是第一个失败的子promise