1.Promise是什么?
Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。
2.Promise的基本用法
2.1 then中成功失败的执行
// resolve代表成功 reject失败 都是一个函数 let p = new Promise(function(reslove,reject){ //reslove('成功') //状态由等待变为成功,传的参数作为then函数中成功函数的实参 reject('失败') //状态由等待变为失败,传的参数作为then函数中失败函数的实参 }) //then中有2个参数,第一个参数是状态变为成功后应该执行的回调函数,第二个参数是状态变为失败后应该执行的回调函数。 p.then((data)=>{ console.log('成功'+data) },(err)=>{ console.log('失败'+err) })
Promise承诺:默认情况下是等待状态pending,如果有一天状态转变为成功就成功了,如果状态变成失败就失败了。状态一旦改变了就不能再改变了。
2.2如果then中返回了一个promise 会将promise的结果继续传给第二then中(如果结果是将状态改成成功就走下一个then的成功回调,状态改为失败就走下一个then的失败回调)
function read( content ) { return new Promise(function( reslove,reject ) { setTimeout(function(){ if(content>4){ resolve(content) }else{ reject('小于4') } },1000) }) } read(1).then(( data )=>{ console.log(data) },( err )=>{ console.log(err) //小于4 return read(2) //将状态改为了失败 }) .then(( data )=>{ console.log('data',data) },( err )=>{ console.log(err) //小于4 })
2.3 第一个then不管是走成功还是失败的回到函数,只要返回一个普通值(不抛出错误或者返回promise),都会执行下一个then的成功的回调
let p = new Promise(function(reslove,reject){ reject('失败1') }) p.then((data)=>{ console.log('成功'+data) },(err)=>{ console.log('失败'+err) //失败失败1 }) .then((data)=>{ console.log('成功1'+data) //成功1undefined },(err)=>{ console.log('失败1'+err) }) eg:抛出错误执行下一个then的失败 let p = new Promise(function(reslove,reject){ reject('失败1') }) p.then((data)=>{ console.log('成功'+data) },(err)=>{ console.log('失败'+err) //失败失败1 }) .then((data)=>{ console.log('成功1'+data) //成功1undefined throw Error('下一个失败') },(err)=>{ console.log('失败1'+err) }) .then((data)=>{ console.log('成功2'+data) },(err)=>{ console.log('失败2'+err) //失败2Error: 下一个失败 })