async/await的使用方法
什么是async和await
你要想理解语法,可以先从两个单词的基本意思来进行了解.async是异步的简写,而await可以堪称async wait的简写。明白了两个单词,就很好理解了async是声明一个方法是异步的,await是等待异步方法完成。注意的是await必须在async方法中才可以使用因为await访问本身就会造成程序停止堵塞,所以必须在异步方法中才可以使用。
sync到底起什么作用?
async是让方法变成异步,这个很好理解,关键是他的返回值是什么?我们得到后如何处理?
根据以前的经验,我们希望用return直接返回async函数的值,但是如果真是这样,还有await什么作用,我们写段代码测试一下。
async function testAsync(){ return 'Hello async'; } const result = testAsync(); console.log(result);
在终端里用node执行这段代码,你会发现输出了Promise { ‘Hello async’ },这时候会发现它返回的是Promise。
PS E:\code\BXShop> node test.js
Promise { 'Hello async' }
await在等什么?
await一般在等待async方法执行完毕,但是其实await等待的只是一个表达式,这个表达式在官方文档里说的是Promise对象,可是它也可以接受普通值。我们写一段代码来验证一下这个结果。在程序中我们有用async的方法,也有普通的方法。最后在控制台输出时,你会发现都可以直接输出。
function getSomething(){ return 'something'; } async function testAsync(){ return 'Hello async'; } async function test(){ const v1=await getSomething(); const v2=await testAsync(); console.log(v1,v2); } test();
sync/await同时使用
通过前面两个例子已经分别了解async和await,我们来作个虚假的例子,看一下等待问题。这只是一个虚假的,实际项目中多是去后台请求数据,等数据回来后进行执行。
function takeLongTime() { return new Promise(resolve => { setTimeout(() => resolve("long_time_value"), 1000); }); } async function test() { const v = await takeLongTime(); console.log(v); } test();