参考原文:
https://blog.csdn.net/sinat_17775997/article/details/60609498
在js中我们可以使用Promise方便地进行异步操作,但是有时候会有两个异步操作之间需要保证先后关系,比如请求一次数据A,A数据得到后然后再请求数据B。
要解决上述问题,以往情况下我们可以在请求A数据的Promise的then中再new 一个Promise来请求B。这样是完全没有问题的,但是代码看起来似乎不太优雅,仿佛又回到原来的回调地狱里。es7给我们提供了async await来更加简单地解决上述问题。先看代码
var test=async function () {
await new Promise(function(resolve,reject){
setTimeout(function(){
console.log('111')
resolve('111')
},5000)
}).then((data)=>console.log('task1 end'))
await new Promise(function(resolve,reject){
setTimeout(function(){
console.log('222')
resolve('222')
},5000)
}).then((data)=>console.log('task2 end'))
}
test()
代码中的test函数用了async修饰,表明这是一个异步方法。在一个同步方法中才可以使用await关键字。
await关键字可以用来等待一段异步代码的运行,实际上是等待一个promise resolve,返回值就是这个promise resolve后经过then处理后最后的返回值。函数执行到await后此函数就会等待await的函数执行完毕才会继续向下执行,等待期间不会阻塞,其他函数可以正常执行。