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