一、 过去使用回调函数嵌套,会进入回调函数地狱,不利于开发人员维护,如下代码是回调嵌套:
//这就是所谓的回调嵌套,testOne执行完之后在他的回调函数中执行testTwo,
//testTwo执行完之后在他自己的回调函数中执行testThree,
//testThree执行完之后,在他自己的回调函数执行testFour
testOne(function(){
testTwo(function() {
testThree(function() {
testFour()
})
})
})
二、promise,把异步事件转换为同步事件链式。
//resolve和reject只能有一种结果出现
new Promise((resolve, reject) => {
resolve('成功') //pending 转为 resolve
//reject('失败') //pending 转为 reject
console.log('promise实例') //输入 “promise实例”
})
//resolve和reject只能有一种结果出现
new Promise((resolve, reject) => {
return resolve('成功') //pending 转为 resolve,后面的代码不会输出
//return reject('失败') //pending 转为 reject
console.log('promise实例') //这句不会输出
})
//resolve和reject只能有一种结果出现
new Promise((resolve, reject) => {
resolve('成功') //pending 转为 resolve,resolve传递数据到then方法的回调函数
//return reject('失败') //pending 转为 reject
console.log('promise实例') //输出 ‘promise实例’
}).then(
(data) => { console.log(data) } //成功回调,输出:“成功”,resolve函数的数据
(failData) => { console.log(failData) } //失败回调,可选
)
//resolve和reject只能有一种结果出现
new Promise((resolve, reject) => {
reject('失败') //pending 转为 reject
}).then(() => {
console.log('成功回调') //成功回调,必写
}).catch(() => {
console.log('catch失败回调') //尽量使用catch而不使用then的第二个回调函数
})
7.new Promise构造函数的代码同步执行,then()方法里的代码异步执行。then()方法返回的是一个新的Promise实例,因此可以采用链式写法,即then方法后面再调用另一个then方法,前一个then()方法的回调函数完成以后,会将返回结果作为参数,传入下一个then()方法的回调函数。代码如下:
function getOne() {
return new Promise((resolve, reject) => {
resolve('getOne')
})
}
getOne().then((data) => {
console.log(data) //输入 ‘getOne’
return data //将data作为下一个回调函数的参数
}).then((res) => {
console.log(res) //输入 ‘getOne’
})
//前一个回调函数的catch执行正常
function getOne() {
return new Promise((resolve, reject) => {
reject('getOne')
})
}
getOne().then((data) => {
}).catch((data) => {
console.log(data) //输出 ‘getOne’
return data //捕获reject状态的回调函数将data作为下一个回调函数的参数
}).then((res) => {
//上一个then()方法的catch的回调函数返回的数据,在下一个then方法的回调函数接收
console.log(res) //输入 ‘getOne’
})
//前一个回调函数的catch执行不正常
function getOne() {
return new Promise((resolve, reject) => {
reject('getOne')
})
}
getOne().then((data) => {
}).catch((data) => {
console.log(data) //输出 ‘getOne’
p = p + 2; //p变量没有定义,这里会报错
return data //捕获reject状态的回调函数将data作为下一个回调函数的参数
}).then((res) => {
}).catch((data) => {
//这里会接收上一个回调函数的异常错误
console.log(data)
})
输出:
9. Promise.all() 是并发处理多个异步,其中一个异步出现异常出错误,则会中止往下执行,不会执行之后的异步
//p1,p2,p3代码不同的异步事件
//then()方法的回调函数的参数是一个数组,这个数组是异步事件返回的数据组成的数组
new Promise([p1,p2,p3]).then((arr) => {})
学习链接:阮一峰的es6
以上是我个人的学习笔记,如有问题,请留言哦