async
是ES7
的与异步操做有关的关键字,其返回一个Promise
对象,await
操做符用于等待一个Promise
对象,它只能在异步函数async function
内部使用。javascript
async function name([param[, param[, ... param]]]) { statements }
name
: 函数名称。param
: 要传递给函数的参数的名称。statements
: 函数体语句。async
函数返回一个Promise
对象,可使用then
方法添加回调函数,返回的Promise
对象会运行执行resolve
异步函数的返回结果,若是抛出异常则运行拒绝reject
。java
async function asyncPromise(v){ return v; } asyncPromise(1).then((v) => { console.log(v); }).catch((e) => { console.log(e); })
async
通常是配合await
指令使用的,该指令会暂停异步函数的执行,并等待Promise
执行,而后继续执行异步函数,并返回结果。若Promise
处理异常rejected
,await
表达式会把Promise
的异常缘由抛出。另外,若是await
操做符后的表达式的值不是一个Promise
,则返回该值自己。promise
function promise(){ return new Promise(function(resolve,reject){ var rand = Math.random() * 2; setTimeout(function(){ resolve(`solve ${rand}`); },1000) }) } (async function asyncPromise(){ var result = await promise(); console.log(result); })(); // 捕捉异常 function promise(){ return new Promise(function(resolve,reject){ throw new Error(`reject`); }) } (async function asyncPromise(){ var result = await promise(); console.log(result); })().catch((e) => { console.log(e); }); // 非promise对象直接返回该值自己 function notPromise(){ return 1; } (async function asyncPromise(){ var result = await notPromise(); console.log(result); })();