async應該是目前nodejs裏最簡單直白的異步方案了,async函數實際上就是generator函數的語法糖,省掉了callback的回調地獄,generator的yield next,promise的 .then .catch,使代碼看起來更像是同步流程方案,更扁平化。下面看個例子:
這裏我們要實現一個暫停功能,輸入N毫秒,則停頓N毫秒後才繼續往下執行。
// 這裏是一個功能函數 也可以是其他比較耗時的操作。 var sleep = function (time) { return new Promise(function (resolve, reject) { setTimeout(function () { resolve(); }, time); })}; var start = async function () { // 在這裏使用起來就像同步代碼那樣直觀 console.log('start'); await sleep(3000); console.log('end'); }; start();
控制檯先輸出start,稍等3秒後,輸出了end。
async函數使用方式:
// async 必不可少 是async函數的標誌 async function myFunc(){ ... //普通代碼 await ... // 1 耗時代碼 或執行耗時函數 執行並等待完成之後繼續執行下面的代碼 let res = await ... // 2 耗時代碼 或執行耗時函數 並得到返回結果 ... }
錯誤捕捉方式:
// async 使用try.catch捕捉錯誤 async function myFunc(){ try{ ... await ... } catch(e) { throw e; } }
本文參考http://cnodejs.org/topic/5640b80d3a6aa72c5e0030b6