摘要:或許你說你之前用過來做異步流程控制。那么作為一個程序好奇貓,你一定剖析過的源碼吧,很好奇它怎么使用來控制的同步。
promise + yield = 異步流程控制
異步計算已經(jīng)成為前后端不阻塞主線程的不二選擇,無論是增加性能或是提升用戶體驗,anyway,這年頭誰不用兩下并發(fā)呢?
既然說到異步那就不得不提 promise 了,這個新的語法糖雖然建立在 callback 之上,但也好歹止住了之前愚民們瘋狂跳進(jìn)回調(diào)地獄的惡魔崇拜似的勢頭。ES的功勞一件。 或許你說你之前用過 co ?來做異步流程控制。那么作為一個程序好奇貓,你一定剖析過 co 的源碼吧,很好奇它怎么使用 yield 來控制 promise 的同步。 在本文中我將以 5個語句解析之。。。 沒錯,就是5個語句。
sheepOut = new Promise( function(resolve) { waitForTime(500); resolve( log( "Eat grass" ) ) }) eatGrass = function *() { var ret = yield sheepOut() sheepBack() } step = eatGrass() // yield 就像壞掉的鐘,撥一下,走一下。 not_done_promise = step.next() //sheepOut被異步調(diào)用了,返回一個還未結(jié)束的promise not_done_promise.then( step.next() ) // 這句話是關(guān)鍵也就是說 sheepOut 未結(jié)束 //step 就一直卡在 yield, 直到 sheepOut 執(zhí)行完畢,then 調(diào)用 next 進(jìn)入 sheepBack. 所以整個流程是這樣的 sheepOut(異步) -> yield(阻塞) -> sheepOut.then(調(diào)用next結(jié)束yield阻塞) -> sheepBack
怎么樣?現(xiàn)在你能理解異步流程控制的技巧了沒?說穿了就是靠 promise 的 then 回調(diào) generator 的 next 來解除流程的阻塞。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/82347.html
摘要:換句話說,我們很好的對代碼的功能關(guān)注點進(jìn)行了分離通過將使用消費值得地方函數(shù)中的邏輯和通過異步流程來獲取值迭代器的方法進(jìn)行了有效的分離。但是現(xiàn)在我們通過來管理代碼的異步流程部分,我們解決了回調(diào)函數(shù)所帶來的反轉(zhuǎn)控制等問題。 本文翻譯自 Going Async With ES6 Generators 由于個人能力知識有限,翻譯過程中難免有紕漏和錯誤,還望指正Issue ES6 Gener...
摘要:而在中是迭代器生成器,被創(chuàng)造性的拿來做異步流程控制了。當(dāng)執(zhí)行的時候,并不執(zhí)行函數(shù)體,而是返回一個迭代器。行代碼再看看文章開頭的行代碼首先生成一個迭代器,然后執(zhí)行一遍,得到的是一個對象,里面再執(zhí)行。 廣告招人:阿里巴巴招前端,在這里你可以享受大公司的福利和技術(shù)體系,也有小團(tuán)隊的挑戰(zhàn)和成長空間。聯(lián)系: qingguang.meiqg at alibaba-inc.com 首先請原諒我的標(biāo)題...
摘要:更好的異步編程上面的方法可以適用于那些比較簡單的異步工作流程。小結(jié)的組合目前是最強大,也是最優(yōu)雅的異步流程管理編程方式。 訪問原文地址 generators主要作用就是提供了一種,單線程的,很像同步方法的編程風(fēng)格,方便你把異步實現(xiàn)的那些細(xì)節(jié)藏在別處。這讓我們可以用一種很自然的方式書寫我們代碼中的流程和狀態(tài)邏輯,不再需要去遵循那些奇怪的異步編程風(fēng)格。 換句話說,通過將我們generato...
摘要:后面跟著的應(yīng)該是一個對象其他返回值也可以,只是會立即執(zhí)行捕獲錯誤參考文章函數(shù)的含義與用法 JavaScript異步流程控制的前世今生 showImg(https://segmentfault.com/img/remote/1460000012892876?w=600&h=338); javascript在設(shè)計之初.為了避免資源管理復(fù)雜問題(多個線程同時操作dom,以哪個為準(zhǔn)),因此被設(shè)...
摘要:以下展示它是如何工作的函數(shù)使用構(gòu)造函數(shù)創(chuàng)建一個新的對象,并立即將其返回給調(diào)用者。在傳遞給構(gòu)造函數(shù)的函數(shù)中,我們確保傳遞給,這是一個特殊的回調(diào)函數(shù)。 本系列文章為《Node.js Design Patterns Second Edition》的原文翻譯和讀書筆記,在GitHub連載更新,同步翻譯版鏈接。 歡迎關(guān)注我的專欄,之后的博文將在專欄同步: Encounter的掘金專欄 知乎專欄...
閱讀 3142·2021-11-11 16:54
閱讀 2315·2021-09-04 16:48
閱讀 3226·2019-08-29 16:08
閱讀 646·2019-08-29 15:13
閱讀 1350·2019-08-29 15:09
閱讀 2669·2019-08-29 12:45
閱讀 1932·2019-08-29 12:12
閱讀 455·2019-08-26 18:27