本文主要闡述了JS異步編程的思想运悲,不具體描述文中各個庫的作用它呀,閱讀前需掌握Thunk海诲、Promise的基礎(chǔ)知識
1.Promise或者Thunk的作用在于级野,將一步操作中的請求與回調(diào)部分页屠,明確的分離開了粹胯;
2.Generator的作用在于通過協(xié)程的方式,在yield后面跟上要執(zhí)行的異步函數(shù)(準確的說yield后面跟上的是異步函數(shù)的請求部分)辰企,然后在流程控制的run函數(shù)中风纠,通過調(diào)用iterator.next()來執(zhí)行異步函數(shù)的請求部分,并獲取異步函數(shù)的入口賦值給result.value牢贸,之后通過result.value(args)來執(zhí)行異步函數(shù)的回調(diào)部分竹观,并且在回調(diào)部分(如:Thunk的回調(diào)函數(shù),或者Promise的then()函數(shù))通過遞歸調(diào)用iterator.next()潜索;
3.由于yield能夠暫停函數(shù)執(zhí)行的作用臭增,通過在異步操作的請求階段交出控制權(quán),以及在異步操作的回調(diào)階段回收控制權(quán)竹习,使得異步函數(shù)的執(zhí)行過程看上去仿佛同步函數(shù)一般(var g = yield getFoo()誊抛,去掉yield的話是不是看上去和同步函數(shù)一樣_),又通過流程控制中遞歸函數(shù)的不斷迭代使得生成器中的代碼可以一行完成執(zhí)行整陌,避免promise……then帶來的閱讀困難拗窃。