什么是promise
Promise是解决异步编程的一种方案,用同步的写法来进行异步请求,Promise是一个构造函数,用new来创建Promise实例对象,回调函数作为它的参数,该回调函数有两个参数,分别是resolve和reject,resolve异步请求成功执行,reject异步请求失败执行
Promise的三种状态
对象的状态不受外界的影响,状态分别是pending(进行中)、fullfilled(已成功)和rejected(已失败),状态一旦改变,就不会再变,状态改变只有两种可能:从pending到fullfilled或者是从pending到rejected
Promise的方法(4种)
Promise有then和catch方法Promise.all()和Promise.race()
-
then方法请求成功的回调
then方法是构造函数原型上的方法,每次执行then后,返回一个新的Promise实例,那么就代表可以不断的then,形成链式编程
new Promise((resolve,reject)=>{ setTimeout(()=>{ //异步请求成功执行 resolve(123) },3000) }).then(res=>{ console.log(res); //123 return 456 }).then(res1=>{ console.log(res1); //456 })
-
Promise.all()一起处理多个Promise请求,所有的请求成功才成功
Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。 // 三个异步都都变成fullfilled Promise.all([异步1,异步2,异步3])变成fullfilled Promise.all([异步1, 异步2, 异步3]).then((res) => { // res==[异步1结果,异步2结果,异步3结果] })
-
Promise.race()一起处理多个Promise请求,有一个成功就成功
// 三个异步只要有一个变成fullfilled Promise.race([异步1,异步2,异步3])就变成fullfilled Promise.race([异步1, 异步2, 异步3]).then((res) => { // res==[异步1结果,异步2结果,异步3结果] })
Promise处理错误的两种方式
-
第一种是通过catch方式来实现
new Promise((resolve,reject)=>{ setTimeout(()=>{ // 异步请求失败执行 reject('失败') },3000) }).then((res)=>{ //不执行 console.log(res); }).catch(err=>{ //失败执行 console.log(err); // '失败' })
-
第二种是在then中传递两个回调函数,第二个回调是错误信息的回调
new Promise((resolve,reject)=>{ setTimeout(()=>{ // 异步请求失败执行 reject('失败') },3000) }).then((res)=>{ //不执行 console.log(res); },(err)=>{ // 失败执行 console.log(err,'err'); //'失败' 'err' })