CO函數庫
阿新 • • 發佈:2018-01-15
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函數庫