一、async/await基础语法
在Node.Js编程中,async关键字用于定义异步函数,这个异步函数执行完会返回一个Promise对象,异步函数的内部可以使用await关键字来暂停当前代码的继续执行,直到Promise操作完成。
在用法上,async关键字主要用于声明一个异步函数,await关键字主要用于等待Promise操作的返回结果,若await等待的Promise操作被rejected,此时会抛出异常,需要对异常采用"try/catch"处理。
async/await的语法格式:
async function() {await [Asynchronous Action]}
async/await代码样例:
1.等待Promise执行结果,并利用try/catch捕获异常
//定义异步函数
async function fetchData() {try {//异步操作,从API获取数据//使用await等待函数执行完成const response = await fetch('https://test.com/');const data = await response.json();console.log('The data is:', data);} catch (error) {console.error('Err occured:', error);}
}//调用异步函数
fetchData();
2.async时序测试
async function async1() {console.log('async1 start');await async2();console.log('async1 end'); }
async function async2() {console.log('async2 finish'); }
console.log('script start');
async1();
console.log('script end');
运行结果:
script start
async1 start
async2 finish
script end
async1 end
二、async/await和Promise的关系
1.async/await的语法是基于Promise来实现的。
2.async/await对Promise进行了封装,异步编程时避免了繁琐的Promise链式调用。
3.async/await的设计是为了简化Promise异步编程的实现方式,代码可读性更强。
4.async/await基于Promise增加了对执行步骤的控制,可以通过await来暂停/恢复执行。
基于Promise实现的异步操作:
fetchData().then(data => process(data)).then(result => save(result)).catch(err => console.error(err));
基于async/await实现的异步操作:
try {const data = await fetchData();const result = await process(data);await save(result);
} catch (err) {console.error(err);
}
以上代码实现中,基于".then"实现的连续操作会让每一个步骤立即执行,基于await实现的连续操作可以让当前步骤暂停等待。
以下两段代码的实现效果相同:
Demo