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