generator co模組和async三者的區別

2021-09-14 04:32:57 字數 1689 閱讀 9473

特點

function*

可以使用yield返回多次

呼叫方法

使用next()執行generator**,每次遇到yield就返回乙個物件, 如果donetrue,則value就是return的返回值,沒有return就返回undefined,如果return語句後面還有yield,這個generator物件就全部執行完成,不要再繼續呼叫next()

直接用for ... of迴圈迭代generator物件,這種方式不需要我們自己判斷done

for (var x of fib(5))
如果給next方法傳引數, 那麼這個引數將會作為上一次yield語句的返回值

function* foo(x) 

var a = foo(5);

a.next() // object

a.next() // object

a.next() // object

var b = foo(5);

b.next() //

b.next(12) //

b.next(13) //

作用

ajax的非同步處理

function* main() ");

console.log(result);

//do 別的ajax請求;

}

模組思路

co 模組的思路就是利用 generator 的這個特性,將非同步操作跟在 yield 後面,當非同步操作完成並返回結果後,再觸發下一次 next() 。當然,跟在 yield 後面的非同步操作需要遵循一定的規範 thunks 和 promises。

function co(gen) );

}function sayhello() );

}co(function *helloworld() );

內建執行器。 generator 函式的執行必須靠執行器,所以才有了 co 函式庫,而 async 函式自帶執行器。也就是說,async 函式的執行,與普通函式一模一樣,只要一行。

更好的語義。 async 和 await,比起星號和 yield,語義更清楚了。async 表示函式裡有非同步操作,await 表示緊跟在後面的表示式需要等待結果。

更廣的適用性。 co 函式庫約定,yield 命令後面只能是 thunk 函式或 promise 物件,而 async 函式的 await 命令後面,可以跟 promise 物件和原始型別的值(數值、字串和布林值,但這時等同於同步操作)。

express

優點:線性邏輯,通過中介軟體形式把業務邏輯細分、簡化,乙個請求進來經過一系列中介軟體處理後再響應給使用者,清晰明了。

缺點:基於 callback 組合業務邏輯,業務邏輯複雜時巢狀過多,異常捕獲困難。

koa優點:首先,借助 co 和 generator,很好地解決了非同步流程控制和異常捕獲問題。其次,koa 把 express 中內建的 router、view 等功能都移除了,使得框架本身更輕量。

缺點:社群相對較小。

time模組和os模組,json模組

import time def month n time.local struct time time.strptime y m 1 y m d print struct time return time.mktime struct time print month 2 ret time.local...

sys模組 和os模組

sys模組 sys.argv 命令列引數list,第乙個元素是程式設計師本事路徑 sys.exit n 退出程式,正常退出時exit 0 sys.version 獲取python解釋程式的版本資訊 sys.maxint 最大的int值 3.0取消 sys.path 返回模組的搜尋路徑,初始化時使用p...

Python os模組和shutil模組

一 python中對檔案 資料夾操作時經常用到的os模組和shutil模組常用方法。1.得到當前工作目錄,即當前python指令碼工作的目錄路徑 os.getcwd 2.返回指定目錄下的所有檔案和目錄名 os.listdir 3.函式用來刪除乙個檔案 os.remove 4.刪除多個目錄 os.re...