Promise
Promise es6 是异步编程的解决方案;
回调里面套回调,次数过多,造成的现象叫,回调地狱
promise 提供了三种状态,分别是 pending 进行时的状态,fulfilled 成功的状态,它会自动调用一个叫 resolve 的方法,rejected 拒绝的状态,会自动调用 reject 这个方法
用法:
var p = new Promise(function(resolve,reject){ // Promise 的实例只能这么使用
resolve(res) // 成功的回调
reject(err) // 失败的回调
})
现在 p 就是 Promise 的实例,实例上有两个方法,一个代表成功的 then ,一个代表失败的 catch
p.then(function(res){
console.log(res) // 成功后响应
}).catch(function(err){
console.log(err) // 失败后响应
})
注意事项:1. 成功 (resolve) 和拒绝 (reject) 二选一 (只能选一个)
2. 当是 resolve 的时候,其实就是调用 then 这个方法
3. 当是 reject 的时候,其实就是调用了 catch 这个方法
Promise 对异步代码的整合
promise 的三种使用方法 es6 写法
1. 基本用法
new Promise((resolve,reject)=>{
resolve()
reject()
}).then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
2. 链式调用,
new Promise((resolve,reject)=>{
resolve(res)
reject(err)
}).then(res=>{
console.log(res);
return new Promise((resolve,reject)=>{
resolve(res)
reject(err)
})
}).then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
3. 并发 (一起进行异步处理)
var p1 = new Promise((resolve,reject)=>{
resolve(res)
reject(err)
})
var p2 = new Promise((resolve,reject)=>{
resolve(res)
reject(err)
})
Promise.all([p1,p2]).then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
Promise 中不能实现功能,让 .then() 去实现
数组中的异步都成功了才执行 then() 方法,有一个不成功才会执行 catch 的方法
不要让项目产生过多的对第三方的依赖