ES6異步操做Thunk、co和async

  使用Thunk函數對Generator函數進行流程管理,首先什麼是Thunk函數?咱們應該先說下參數的求值策略,編譯器的求值策略一個是「傳值調用」另外一個是「傳名調用」,編譯器的傳名調用實現每每是現將函數放到一個臨時函數中,再將這個臨時函數傳入函數體,這個臨時函數就是Thunk。npm

  若是用於生產環境的轉換器,建議使用Thunkify模塊。首先安裝 npm install thunkify,若是你不想去寫Generator構造器,那麼安裝co吧,安裝命令爲 npm install co ,這個co是一個自動執行器。async

var thunkify = require('thunkify');
var co = require('co');
var test = function *() {
    var a1 =  console.log(1);
    var a2 =  console.log(2);
    var a3 =  console.log(3);
    var a4 =  console.log(4);
    return '完畢';
};
console.log(co(test));            //1 2 3 4 Promise { '完畢' }

  若是你還想懶那麼就可使用async(注意這是ES7提供的函數),他是Thunk+co。他就是將Generator函數的*號換成了async,將yield換成了await而已。函數

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 (三秒後) end
相關文章
相關標籤/搜索