JS 基礎之非同步(六) co 函式庫

2021-09-10 17:34:17 字數 1633 閱讀 5395

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...