摘要:等到一段時間后,車到了,小紅打電話給小明車到了發布,小明在接到電話之后,要做一些準備訂閱時定義的回調函數。工作中的異步通過事件實例去做調控,簡單的代碼示例是一個事件實例,負責發布訂閱者的內部實現訂閱發布另一端程序干一些事情。
淺談異步編程 引子
頁面渲染與setTimeout();同步與異步------我的理解
任務在當次事件循環中阻塞后續任務進行的(指的是耗時較多,這個多少,暫時還沒有個概念,反正就是在獲取的cpu時間片中不做實際事情的就是阻塞吧),就是同步;任務在當次事件循環中不阻塞后續任務進行的(簡單的可以理解為,一條流水線上,某個步驟要檢測是否合格,不影響流水線的情況下,由流水線之外的工作人員,相當于worker,去做這件事情),就是異步;異步編程重要js設計模式-------發布訂閱者模式
現實中的異步----------買車
小明要買車,小紅告訴他現在車還沒到,到的時候再打電話給他,于是小明留下了聯系方式(訂閱)。等到一段時間后,車到了,小紅打電話給小明車到了(發布),小明在接到電話之后,要做一些準備(訂閱時定義的回調函數)。
工作中的異步
通過事件實例去做調控,簡單的代碼示例:
// emitter是一個事件實例,負責發布訂閱者的內部實現 // 訂閱 emitter.on("eventName", function () { dosomeThing(); }); // 發布 // 另一端程序干一些事情。好了~時機到了,就: emitter.emit("eventName");
發布訂閱者模式其實在代碼執行順序上就是:訂閱(監聽)------> 發布(觸發)
傳統異步編程
通過高階函數實現
// 定義高階函數 var asyncFn = function (cb) { // dosomeThing async... typeof === "function" && cb(); }; // 使用 asyncFn(function (res) { // dosomeThing callback... });
現在比較常用的Promise
var asyncFn = function () { // dosomeThing sync... Promise.resolve(); // 通常用于當次事件循環(或者當前線程執行)結束之后才需要干的事情 }
// 碼段1 let asyncFn = new Promise((resolve, reject) => { resolve("完成"); }); asyncFn.then((res) => { console.log(res); }); console.log("同步");
碼段1 執行結果:
VM51728:1 同步執行 22:26:27.891 VM51728:1 完成 22:26:27.891 undefined產生異步的情況
setTimout()
setInterval()
requestAnimationFrame()
Promise.resolve()方法
各種ajax異步請求
Vue的nextTick()方法,由三種方式實現
jsonp加載方式
...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90113.html
摘要:事件循環背景是一門單線程非阻塞的腳本語言,單線程意味著,代碼在執行的任何時候,都只有一個主線程來處理所有的任務。在意識到該問題之際,新特性中的可以讓成為一門多線程語言,但實際開發中使用存在著諸多限制。這個地方被稱為執行棧。 事件循環(Event Loop) 背景 JavaScript是一門單線程非阻塞的腳本語言,單線程意味著,JavaScript代碼在執行的任何時候,都只有一個主線程來...
摘要:三即生成器,它是生成器函數返回的一個對象,是中提供的一種異步編程解決方案而生成器函數有兩個特征,一是函數名前帶星號,二是內部執行語句前有關鍵字調用一個生成器函數并不會馬上執行它里面的語句,而是返回一個這個生成器的迭代器對象。 文章來自微信公眾號:前端工坊(fe_workshop),不定期更新有趣、好玩的前端相關原創技術文章。 如果喜歡,請關注公眾號:前端工坊版權歸微信公眾號所有,轉載請...
摘要:與在模塊化編程的世界中,有兩個規范不得不提,它們分別是和。所有依賴于某個模塊的代碼全部移到模塊加載語句的回調函數中去。的語句接受兩個參數在回調函數中,可以通過變量引用模塊。回調函數的返回值就是當前對象的導出值。 JavaScript本身不是一種模塊化語言,設計者在創造JavaScript之初應該也沒有想到這么一個腳本語言的作用領域會越來越大。以前一個頁面的JS代碼再多也不會多到哪兒去,...
摘要:一概述在引入同步非阻塞包之后,終于在版本加入了異步的。注意,無論用還是,這里的調用都是非阻塞的立即返回。不過,由于朝鮮還沒有研發出能夠重返大氣層的運載火箭,所以大浦洞號尚不具備搭載彈頭的攻擊能力。 一、概述 JDK在1.4引入NIO(同步非阻塞)包之后,終于在1.7版本加入了異步IO的AIO。同步異步阻塞和非阻塞等概念,建議參考 《Unix網絡編程》 卷1. ,這里只談AIO的api。...
閱讀 2414·2021-11-24 09:39
閱讀 3241·2021-10-09 09:53
閱讀 1135·2021-09-22 16:06
閱讀 4453·2021-09-02 10:18
閱讀 803·2021-08-23 09:42
閱讀 1766·2021-08-17 10:11
閱讀 2689·2019-08-30 13:02
閱讀 2125·2019-08-30 12:49