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); })();