一:理解两种类型的回调函数
1,同步回调函数:立即执行,完全执行完才结束,不会放入回调队列中。例如:数组遍历相关的回调函数/Promise的excutor函数
2,异步回调函数:不会立即执行,会放入回调队列中将来在执行。例如:定时器回调/Ajax回调/Promise成功或者失败的回调。(异步回调在实际中使用的比较多)
二:错误的几种类型
1,Error:所有错误类型的父类
2,ReferenceError:引用的变量不存在
3,TypeError:数据类型不正确的错误
4,RangeError:数据值不在其允许的范围内
5,SystaxError:语法错误
三:处理错误的几种方法
错误是一种对象,有两个属性,message:错误信息;stack:函数调用栈记录的信息
1,捕获错误:try catch
2,抛出错误:throw error
四:理解Promise
Promise是js异步处理的一种新的解决方案(之前是通过异步回调函数,处理异步事件)
Promise是什么:
从语法角度:Promise是一个构造函数
从功能角度:promise对象用来封装一个异步操作并可以获取其中的结果
promise对象的状态:pending(初始状态),resolved/fulfilled(回调成功),rejected(回调失败)
promise对象状态值改变的几种可能
pending——》resolved
pending——》rejected
注意:promise对象的状态只能改变一次,无论状态变为成功还是失败,都会有数据结果,成功的结果一般称为value,失败称为reason
五:Promise工作流程图:
一个简单的Promise实例:
/*通过Promise构造函数,来创建一个Promise对象,
Promise函数接收一个函数作为参数(这是一个同步的函数参数)
函数参数又接收两个参数函数,resolve函数用来改变promise对象的状态为成功
reject函数用来改变promise对象的状态为失败
*/
const p=new Promise((resolve,reject)=>{
setTimeout(()=>{
const time=Date.now();
if(time%2==0){
//将状态设置为成功
resolve('成功的数据'+time)
}else{
//将状态设置为失败
reject('失败的数据'+time)
}
},1000)
})
/*
Promise处理异步事件,就是将异步事件和异步处理结果分开
异步事件被封装在promise对象中,异步事件处理结果,无非就三种状态,一种没处理对应
promise中的pending,事件处理结果成功对应promise中的resolved,事件处理结果失败对应promise中的rejected
随后处理结果,就是通过promise的then方法,更具promise对象的状态调用不同的异步回调函数
而且then方法执行完异步回调函数后会返回一个新的promise对象,这样promise链就形成了
*/
p.then(value=>{
console.log('回调成功'+value)
},reason=>{
console.log('失败回调'+reason)
})
六:使用Promise处理异步事件的好处
普通的通过回调函数处理异步事件:回调函数必须在异步任务定义是就指定其回调函数
promise处理异步:启动异步任务》返回一个promise对象》通过then方法给其绑定异步的回调函数(一个promise对象可以通过调用多个then方法来调用多个回调函数)
回调地狱问题:回调函数嵌套调用,外部函数异步执行结果是嵌套的回调执行的条件(就是一个异步回调函数处理结束了,但是又嵌套了一个异步回调),回调地狱问题不利于阅读,不便于处理异常
通过promise链式调用处理地狱问题
优化的解决方案 通过async await处理
七:Promise函数对象的API