1. 程式人生 > >CO函數庫

CO函數庫

ext pan 錯誤 內部 數據解析 封裝 log 自動 row

CO函數庫

用於 Generator 函數的自動執行,co函數返回一個promise對象

Generator 函數:

協程的概念:A執行— A暫停,執行權給B--- B交回執行權--- A恢復執行

Generator 函數是協程在 ES6 的實現,最大特點就是用yield命令 可以交出函數的執行權(即暫停執行),讓異步代碼用同步的方法寫出。

1. 在需要暫停的地方加yield命令

2. 一般Generator函數的函數名之前要加星號以示區別

3. 調用 Generator 函數,會返回一個內部指針(即遍歷器 )

4. Generator 函數內部還可以部署(try..catch…)錯誤處理代碼,捕獲函數體外拋出(throw)的錯誤。

Generator函數 代碼示例:

var fetch = require(node-fetch);
//一個Generator函數
function* gen(){
  var url = https://api.github.com/users/github;
  var result = yield fetch(url);
  console.log(result.bio);
}
//執行Generator函數
var g = gen();  
var result = g.next();  //恢復執行後的結果
 
result.value.then(function(data){ //promise 回調
return data.json(); }).then(function(data){ g.next(data); });
var result = yield fetch(url);

這句是不是很像同步代碼,除了加上了 yield 命令。

上面代碼中,Generator 函數封裝了一個異步操作,該操作先讀取一個遠程接口,然後從 JSON 格式的數據解析信息。

Co函數就是做了這部分工作,讓Generator 函數自動執行:

使用方法非常簡單:Generator 函數只要傳入 co 函數,就會自動執行

var co = require(co);

co(gen).then(function (){ 
//co函數返回一個Promise對象,以此來添加回調 console.log(Generator 函數執行完成); })

Node調試問題記錄:

EADDRINUSE –> E ADDR IN USE 是指端口已被占用

CO函數庫