async await解决异步

async 是“异步”的简写,而 await 可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。

简单理解:

async是让方法变成异步。 await是等待异步方法执行完成。

async是让方法变成异步,在终端里用node执行这段代码,你会发现输出了Promise { ‘Hello async’ },这时候会发现它返回的是Promise。

		
async function getData(){

 return '这是一个数据';
 }
 
 console.log(getData())

console.log(getData())打印返回的值,发现返回的值是Promise

		
Promise { 'Hello async' }

await 在等待async方法执行完毕,其实await等待的只是一个表达式,这个表达式在官方文档里说的是Promise对象,但是它也可以接受普通值。 注意:await必须在async方法中才可以使用因为await访问本身就会造成程序停止堵塞,所以必须在异步方法中才可以使用。

错误写法:这是使用await是错误的写法。


async function getData(){

    return '这是一个数据';
 }

 var d=await getData();
 console.log(d);  //await is only valid in async function

正确写法:await 是等待异步方法执行完成,可以获取异步方法里面的数据,但是必须得用在异步方法里面。


				
 async function getData(){

    return '这是一个数据';
 }

 async function test(){
    var d=await getData();

    console.log(d);
 }
 test();
			

await 阻塞的功能 ,把异步改成一个同步


				
async function getData(){
   console.log(2);
   return '这是一个数据';
}
async function test(){

   console.log(1);
   var d=await getData();
   console.log(d);
   console.log(3);
}
test();  //输出1  2  3

async 会将其后的函数(函数表达式或 Lambda)的返回值封装成一个 Promise 对象,而 await 会等待这个 Promise 完成,并将其 resolve 的结果返回出来


				

function findData() {
	return new Promise(resolve => {
		setTimeout(() => resolve("long_time_value"), 1000);
	});
}

async function test() {
	const v = await findData();
	console.log(v);
}

test();