一.什么是promise
promise是一种异步编程的解决方案,可以用来解决回调地狱的问题,采用链式调用的方式能让代码的编写更加优雅,有条理
二.promise的基本语法结构
new Promise((resolve, reject) => {
// 这里执行异步的操作,然后将异步操作的结果value/reson通过resolve或者reject传入then的回调函数中
resolve(value)/reject(reason)
}).then((res) => {
// 此处的res就是上面resolve传入的value,在then中可以返回一个新的promise对象用来处理下一次异步操作
// 此处可以对res进行处理
return new Promise((resolve, reject) => {
// 将异步操作的结果放入resole/reject进入then
resole(value)/reject(reason)
}).then((res) => {
// 如果不用进行异步操作,只是对数据进行简单处理,可以使这种方式进行下一次then
return Promise.resolve(res + '222')
}).then((res) => {
// 第三个promise的resolve处理
}, (err) => {
// 此处err是reject传入的reason
// 其实then中可以传入两个回调函数参数,第一个参数是promise中使用的resolve后进入成功回调函数,
// 第二个参数是promise中使用reject后进入的失败(或者说是错误)回调函数,在then中失败回调函数可以忽略,然后在最后通过下面的catch方法接受处理失败的结果
}).catch((err) => {
// 此处err是reject传入的reason
// 此处可对err信息进行一些打印操作
})
// 当需要多个异步操作处理完成才对数据进行处理可使用promise.all方法,里面传入一个promise数组,then中的results是一个数组
Promise.all([
new Promise((resolve, reject) => {
setTimeout(() => {
resolve({name: 'why', age: 18})
}, 2000)
}),
new Promise((resolve, reject) => {
setTimeout(() => {
resolve({name: 'kobe', age: 19})
}, 1000)
})
]).then(results => {
console.log(results);
})
注:then的第二个失败回调和catch方法一般只是使用其中一个就可以了,暂未尝试两个同时使用会有什么效果
三.PromiseA+规范
此规范是Promise实现的所遵循的一个规范(可百度查找到),这规范枯燥乏味,可粗略看一下
术语
规范
Promise state
then
实现一个Promise
new Promise((resolve, reject) => {
// Promise大多用来处理异步操作,这里使用setTimeout模拟一个异步操作
setTimeout(() => {
resolve(value)/reject(reason)
},1000)
})
.then((value) => {
// 第一个then
return new Promise((resolve,reject) => {
setTimeout(() => {
resolve(value)/reject(reason)
},1000)
})
}, (reason) => {})
.then((value) => {
// 第二个then
console.log(value)
}, (reason) => {})
.ca