async其实是ES7的才有的,其实是异步操作的进化,其实就是封装一个Promise的对象返回
async function test(){ return 1111 } console.log(test()) //Promise {<resolved>: 1111}
async方法在普通的函数前加上"async"关键字即可。执行这个函数,发现并没有返回1111,而是通过Promise.resolved()将1111封装成了一个Promise对象返回。既然是返回的Promise对象,用then方法来处理。
test().then(res=>{ console.log(res) //1111 })
await
在Generator章节中我们熟悉了yield关键字,yield关键字只能使用在Generator函数中,同样,await关键字也不能单独使用,是需要使用在async方法中。 await字面意思是"等待",那它是在等什么呢?它是在等待后面表达式的执行结果。
function testWait(){ return new Promise((resolve,reject)=>{ setTimeout(function(){ console.log("testWait"); resolve(); }, 1000); }) } async function test(){ await testWait() console.log("hello"); } test() // 依次打印出 testWait hello
是不是理解了await的作用,就是阻塞主函数的执行,直到后面的Promise函数返回结果。
await后面不单单只能说Promise对象可以是字符串,布尔值,数值以及普通函数
function testWait(){ setTimeout(function(){ console.log("testWait"); }, 1000); } async function test(){ await testWait() console.log("hello"); } test() // 依次打印出 hello testWait
通过上面的例子 我们可以得知
1、await后面如果是一个Promise对象,await会阻塞主函数的执行,等待 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果,然后继续执行主函数接下来的代码。
2、await后面如果是非Promise对象,await等待函数或者直接量的返回,而不是等待其执行结果。
文章来源: https://blog.csdn.net/smlljet/article/details/91958303