Q:哈,我想我已經(jīng)學(xué)會(huì)如何使用process這個(gè)東西了!
長豐網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
A:不錯(cuò),學(xué)習(xí)的速度很快,那么期間有沒有發(fā)現(xiàn)什么問題?
Q:怎么會(huì)有問題發(fā)生在我的身上?!絕不可能!
A:哦?看樣子自滿了,那么我問你一個(gè)問題,其中在案例中使用到了process.stdin.emit這個(gè)方法,那么這個(gè)你是否理解呢?而你是否又會(huì)感悟到什么呢?
Q:額,這個(gè)嘛...,額,其實(shí)我感覺,它...(汗...)
A:呵呵,看樣子你的智商是個(gè)硬傷?。?/p>
Q:好吧,我認(rèn)輸了,我的確不知道這個(gè)做什么的,我只是照著樣子做了而已,那么請您告訴我這個(gè)有什么意義嗎?
A:好吧,這個(gè)process.stdin.emit從字面的意思來看就是“進(jìn)程中的標(biāo)準(zhǔn)輸入流執(zhí)行觸發(fā)操作“,而觸發(fā)的是什么就要看具體參數(shù)了,案例中是出發(fā)了“end”操作,也就是終止了輸入流的操作。
Q:哦,明白了,其實(shí)和我心里考慮的差不多,只是不敢確定而已。
A:呵呵。
Q:那么是不是只有process.stdin這個(gè)對象里面才會(huì)有這個(gè)emit方法呢?
A:不是的,這里面就要遷出一個(gè)新的問題,而且這個(gè)問題很重要,這個(gè)問題就是Node.js的核心,事件驅(qū)動(dòng)模型。
Q:哇,聽著好高級,好不懂啊。
A:的確,要理解這個(gè)需要一些時(shí)間去習(xí)慣和接受。
Q:那么就請您相信的講解一下什么是事件吧。
A:好的。
A:從概念上來說,事件就是由于某種外在或內(nèi)在的信息狀態(tài)發(fā)生的變化,從而導(dǎo)致出現(xiàn)了對應(yīng)的反應(yīng)。
Q:那能通俗的解釋一下嗎?
A:當(dāng)然,Node.js的事件模型是建立在觀察者模式下的,而之前所說的監(jiān)聽器也是基于這個(gè)模式的,所謂的觀察者就好比,你就是個(gè)觀察者,而你看到大排檔,就突然有了反應(yīng)流出了口水,這就是觀察者模式,當(dāng)然你也是監(jiān)聽器,你一直在觀察或者監(jiān)聽周圍的環(huán)境,當(dāng)出現(xiàn)了你所感冒的事物,你就有了反應(yīng),比如流口水。
Q:哦,這樣一說就明白了很多,那么這樣是不是也能解釋為什么Node.js的邏輯不是線性的了呢?
A:是的,觀察者模式并沒有順序而言,它只是依據(jù)當(dāng)前或者某一狀態(tài)下所觸發(fā)的事件,那么從另一方面來說,Node.js就非常適合做實(shí)時(shí)交互的應(yīng)用了。
Q:那么我明白了,那么請告訴我在Node.js中事件是如何工作的吧!
A:當(dāng)然可以,Node.js中的事件無處不在,基本所有的對象都會(huì)有事件,那么它如何工作呢?其實(shí)分為這么幾步。
為某個(gè)對象綁定事件(通過on這個(gè)方法綁定),也可以理解為為某個(gè)對象添加一個(gè)或多個(gè)觀察者(通過callback設(shè)定事件,即回調(diào)方法),來觀察這個(gè)對象的動(dòng)作
這個(gè)對象在某個(gè)狀態(tài)或操作下,觸發(fā)事件,或者說激活觀察者行為(通過emit激活某類事件或觀察者);
被激活的事件執(zhí)行相應(yīng)的處理(執(zhí)行callback方法);
Q:哦,那我現(xiàn)在知道執(zhí)行過程了,可是我還是不明白,能不能給我一些實(shí)際的例子呢?
A:當(dāng)然可以。
A:這個(gè)時(shí)候就需要EventEmitter出場了。
Q:EventEmitter?這是什么?
A:EventEmitter是Node.js中事件的核心對象,所有的事件基本都是通過這個(gè)對象完成構(gòu)建的!這是非常之重要的對象,而且沒有之一。
Q:這么厲害,那么就快點(diǎn)告訴我該如何使用它構(gòu)建我自己的事件吧!
A:好,不過也要慢慢來,下面就給出幾個(gè)簡單案例你先慢慢消化。
代碼如下:events-emitter.js
執(zhí)行效果如下:
代碼如下:event-install.js
執(zhí)行效果如下:
代碼如下:event-inherits.js
執(zhí)行效果如下:
Q:上面是一些事件中的添加事件和執(zhí)行的三種方法,當(dāng)然還有其他的方法我沒有給你說,在后面的時(shí)間里會(huì)慢慢補(bǔ)充,當(dāng)然你也可以先參照這個(gè)API進(jìn)行操作,http://www.nodejs.org/api/events.html。
A:看樣子我還是要消化一下,看起來好像容易發(fā)生錯(cuò)誤的樣子。
Q:是的,這里其實(shí)牽扯到了很多知識,不過不要問太多的為什么,首先呢你先會(huì)使用這些,等到你的知識儲(chǔ)備多的時(shí)候自然就慢慢懂了,但是核心的概念要明確!
A:那還不是很簡單,不過讓我先試試這寫代碼。
文章標(biāo)題:[Node.js]四.什么是事件,它又如何工作,EventEmitter是個(gè)什么貨?
分享網(wǎng)址:http://aaarwkj.com/article16/peggdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、、響應(yīng)式網(wǎng)站、網(wǎng)站維護(hù)、移動(dòng)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)