co 函式庫是 tj 大神基於es6 generator 的非同步解決方案。要理解 co ,你必須首先理解 es6 generator,可以看我之前的文章js 基礎之非同步(五):generator,這裡不在贅述。
co 現在已經不怎麼使用了,一些老版本的庫里可能使用它,我是在看 koa 原始碼的時候看到它的。
co 最大的好處在於通過它可以把非同步的流程以同步的方式書寫出來,並且可以使用 try/catch。
廢話少說,上例項:
var co =
require
('co'
)var fs =
require
('fs'
)// wrap the function to thunk
function
readfile
(filename))}
)}// generator 函式
function
*gen()
// co
co(gen)
.then
(function
(err, result)
)// content in 1.txt
// content in 2.txt
// done
在上例中,co 函式庫可以讓你不用編寫 generator 函式的執行器,generator 函式只要放在 co 函式裡,就會自動執行。
再看乙個例子:
co
(function*(
)catch
(e)}
)
co 函式庫其實就是將兩種自動執行器(thunk 函式和 promise 物件),包裝成乙個庫。但用 co 的乙個代價是 generator 函式的 yield 命令後面必須返回乙個 thunk 或者乙個 promise。
原始碼實現:
function
co(gen)
res* @return
* @api private
*/function
onfulfilled
(res)
catch
(err
)next
(ret)
}/**
* @param err
* @return
* @api private
*/function
onrejected
(err)
catch
(err
)next
(ret)
}/**
* get the next value in the generator,
* return a promise.
** @param ret
* @return
* @api private
*/function
next
(ret)})
}
注意:onfulfilled
這個函式只在兩種情況下被呼叫,一種是呼叫co的時候執行,還有一種是當前promise中的所有邏輯都執行完畢後執行 js基礎 陣列函式庫
陣列函式庫 var aarr 1,2,3,3,2,1,4,5,6,6,5,4 function arrtools arrtools.prototype var arr2 for var key in arr return arr2 2 陣列亂序 randomarr function arr 3 獲取...
jQuery函式庫基礎
src js jquery 1.12.4.min.js script 寫自己的 呼叫jquery函式 script 將獲取元素的語句寫到頁面頭部,會因為元素還沒有載入而出錯,jquery提供了ready方法解決這個問題,它的速度比原生的 window.onload 更快。src jquery jqu...
xe utils基礎函式庫
xe utils函式庫api文件 安裝 npm install xe utils 引入方式1 const xeutils require xe utils 引入方式2 引入方式3 import xeuils from xe utils 注入到根實列中 vue.prototype.utils xeui...