- ES6语法
- Promise是异步编程的一种解决方案
- new Promise((resolve, reject) => {......})
什么情况下用Promise
一般情况下是有异步操作时,使用Promise对异步操作进行封装
//Promise参数是一个函数,这里是(resolve, reject) => {} //这个参数中的函数又有两个参数resolve,reject,也都是函数 //链式编程 new Promise((resolve, reject) => { //异步操作 setTimeout((data) => { //在这里判断成功还是失败 //成功就调用resolve,就会进入后面的.then(),不在此处处理业务 if(){ resolve(data); } else { //失败就调用reject reject('error..') } }, 1000) }).then((data) => { //真正处理业务的地方 console.log("hello world"); }).catch(err => { console.log(err); })Promise的三种状态
- pending:等待状态,比如正在进行网络请求或者定时器没有到时间
- fulfill:满足状态,当我们主动回调resolve时就处于该状态,并且会回调.then()
- reject:拒绝状态,当我们主动回调reject时就处于该状态,并且会回调.catch()
Promise的链式调用
在.then()中不进行异步操作,但是需要对上一步的data进行处理,为了逻辑分层,可进行链式分层
两种方式
- 使用Promise.resovle(newdata):
return Promise.resolve(data + '2222')- 直接return newdata:
return data+'111'//上一层 .then((data) => { console.log(data); //下一层的res从这里来 return Promise.resolve(data + '2222') //return data+'2222' }).then(res => { console.log(res); })在.then中不进行异步操作,但是需要对上一步的err进行处理,为了逻辑分层,可进行链式分层
两种方式
- 使用Promise.reject(err):
return Promise.reject(err + '2222')- 直接throw err:`throw data+'111'
.then(res => { console.log(res); return Promise.reject(res + '+err1') //throw res + '111' }).catch(err => { console.log(err); })Promise.all()
Promise.all([ Promise1, Promise2 ]).then(res => { //Promise1的结果 res[0]... //Promise2的结果 res[1]... })