promise是JS为了解决回调嵌套过于复杂,不利于编程而提出的解决办法
new Promise((res,rej)=>{res("success")}).then(value=>console.log(value),err=>console.log(err))
promise的单一状态和状态中转
promise有三个状态:pending,resolve,reject。而当promise中的状态改变之后,就不会发生改变了。
let promise = new Promise((res,rej)=>{res()//成功函数执行,promise的状态发生改变})
promise的状态中,通过then实现转态中转。promise.then是对上一个返回的promise的处理
let p1 = new Promise((res,rej)=>{res("success")})new Promise((res,rej)=>{res(p1)}).then(value=>console.log(value))//输出success then是对上一个返回的promise的处理.then().then()//如果then中没有处理函数,状态会往下传递
其他Promise的封装
如果返回的对象或者类里面有then方法的话,会等同于返回的promise
let p1 = {then(res,rej){res("success")}}new Promise((res,rej)=>{res(p1)}).then(value=>console.log(value))//对象中有then方法,会被视为Promise,then会调用并处理
class P{then(res,rej){res("success")}}let p1 = new P()new Promise((res,rej)=>{res(p1)}).then(value=>console.log(value))//类实例中有then方法,会被视为Promise,then会调用并处理
class P{static then(res,rej){res("success")}}new Promise((res,rej)=>{res(P)}).then(value=>console.log(value))//类静态方法中有then方法,会被视为Promise,then会调用并处理
Promise的错误监测
promise会监测错误,当有错误抛出,会直接被then中的错误函数捕获。
let p = new Promise((res,rej)=>{//throw new Error("fail")hd+1})p.then(value=>console.log(value),err=>console.log(err))
promise中也有catch函数来统一处理错误。
let p = new Promise((res,rej)=>{hd + 1})p.then(value=>console.log(value)).catch(err=>{console.log(err)})
Promise中的finally
finally是无论promise成功与否都会执行的。等上面的then全部完成之后执行。
let p = new Promise((res,rej)=>{res("hello")})p.then(value=>console.log(value)).finally(value=>console.log("finally"))//输出hello、finally
Promise.resolve()
Promsie.reject()
Promise.all([])
Promise.allSettled([])
Promise.race([])
只会返回最先执行完的promise
