使用场景
有异步代码的时候,可以将异步操作队列化,按照期望的顺序执行。
如,网络请求过程是异步,我们要完成异步网络请求后,处理我们的后续逻辑。
模拟 - 未使用promise 情况
我们可以用setTimeout,模拟异步情况,setTimeout 里面的方法等于是在异步执行
// 调用
function1(){
this.function2();
this.function3();
},
function2(){
setTimeout(()=>{
//把异步执行的代码放到这里去
console.info('function2')
},2000)
},
function3(){
console.info('function3')
}
上面情况, 日志是先打印function3,然后是function2。
模拟 - 使用promise 情况
- 使用promise包住异步方法
- 使用resolve 返回数据
- 用then按序处理,获取resole返回结果
// 调用
function1(){
this.function2().then(val => {
// 打印方法2返回的数据
console.info(JSON.stringify(val))
this.function3();
});
},
function2(obj){
return new Promise((resolve, reject) => {
setTimeout(()=>{
//把异步执行的代码放到这里去
console.info('function2')
// Promise 中用 resolve 返回数据,下一个方法在then中获取
return resolve({name:555});
},2000)
})
},
function3(){
console.info('function3')
}
打印日志结果