慕俠2389804
2019-02-08 18:23:16
function* gen() { const res = yield some(); return res;}co(gen);如上,some方法是否一定要返回一個Promise?如果返回Promise,那么res為什么能得到數(shù)值而不是Promise實(shí)例?
1 回答

富國滬深
TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個贊
是的。因?yàn)?yield 后面語句的返回值,是做為 generator.next(data) 的返回值,而傳入的參數(shù) data 才是作為 yield 語句的返回值,這樣設(shè)定才實(shí)現(xiàn)的協(xié)程的效果。通過 next 函數(shù)返回一個 Promise 對象,執(zhí)行器(這里是 Co 模塊)才能實(shí)現(xiàn)自動執(zhí)行 generator 函數(shù)。大致思想如下:
var g = gen()
// g.next() 執(zhí)行了 yield 后面語句,并返回 Promise 對象
g.next().then(function (data) {
// 將異步數(shù)據(jù)傳入 next 函數(shù),作為 yield 語句的返回值
g.next(data)
})
詳細(xì)信息可以看看阮一峰老師的 Es6 教程和 Co 執(zhí)行器的源代碼
添加回答
舉報(bào)
0/150
提交
取消