日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
揭秘Node.js事件

要使用NodeJS,你需要知道一個重要的東西:事件(events)。Node中有很多對象都可以觸發(fā)事件,Node的文檔中有很多示例。但文檔也許并不能清晰的講解如何編寫自定義事件以及監(jiān)聽函數(shù)。對于一些簡單的程序你可以不使用自定義事件,但這樣很難應(yīng)對復(fù)雜的應(yīng)用。那么如何編寫自定義事件?首先需要了解的是在node.js中的’events’模塊。

創(chuàng)新互聯(lián)長期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為千山企業(yè)提供專業(yè)的網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計,千山網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

快速概覽

要訪問此模塊,只需使用如下語句:

require(‘events’)

requires(‘events’).EventEmitter

特別說明,node中所有能觸發(fā)事件的對象基本上都是后者的實例。讓我們創(chuàng)建一個簡單的演示程序Dummy:

dummy.js

 
 
 
  1. // basic imports
  2. var events = require('events');
  3. // for us to do a require later
  4. module.exports = Dummy;
  5. function Dummy() {
  6.     events.EventEmitter.call(this);
  7. }
  8. // inherit events.EventEmitter
  9. Dummy.super_ = events.EventEmitter;
  10. Dummy.prototype = Object.create(events.EventEmitter.prototype, {
  11.     constructor: {
  12.         value: Dummy,
  13.         enumerable: false
  14.     }
  15. });

上述代碼中重點展示如何使用EventEmitter擴充對象,并從中繼承所有的原型對象,方法…等等。

現(xiàn)在,我們假設(shè)Dummy有一個cooking()的方法,一旦把食物做熟之后它會觸發(fā)’cooked’事件,并調(diào)用一個名為’eat’的回調(diào)函數(shù)。

dummy-cooking.js

 
 
 
  1. Dummy.prototype.cooking = function(chicken) {
  2.     var self = this;
  3.     self.chicken = chicken;
  4.     self.cook = cook(); // assume dummy function that'll do the cooking
  5.     self.cook(chicken, function(cooked_chicken) {
  6.         self.chicken = cooked_chicken;
  7.         self.emit('cooked', self.chicken);
  8.     });
  9.     return self;
  10. }

現(xiàn)在,這個模塊已經(jīng)完成了。我們可以在主程序中使用它。

dummy-node.js

 
 
 
  1. // A nonsensical node.js program
  2. var Dummy = require('./dummy');
  3. var kenny = new Dummy();
  4. var dinner = kenny.cooking(fried_chix);
  5. dinner.on('cooked', function(chicken) {
  6.     // eat up!
  7. }>

所以基本上,node.js執(zhí)行腳本,然后等待’cooked’事件被觸發(fā),并在事件觸發(fā)之后調(diào)用回調(diào)函數(shù)并傳遞返回的參數(shù)。

還有什么要注意的

值得注意的是,例子中使用的“子類”和事件有一些極端(a bit of an overkill)。EventEmitter每次只觸發(fā)一個事件(EventEmitter for things that only fire one event once)。如果只創(chuàng)造少數(shù)幾個實例,可以將方法直接加入到實例本身,如果要觸發(fā)底層事件,可能實用異步函數(shù)會更好一些。

關(guān)于events.EventEmitter,你還需注意一個特別的事件:’error’。任何錯誤發(fā)生時此事件都會觸發(fā),并且當沒有監(jiān)聽程序監(jiān)聽這個事件時,node將會拋出異常并結(jié)束應(yīng)用程序。(感謝Tim指出這一點)

結(jié)束之前的話

這篇文章簡要介紹了一些好的方法(good runthrough)。在發(fā)表之前文章之前,我查閱了我最喜愛的圖書館,參考別人的實現(xiàn),并且還得到了別人的幫助弄把一些問題搞清楚。為了更好的理解node,我建議你閱讀Time Caswell的文章:

What is “this”? http://howtonode.org/what-is-this

同時,你也可以看一下我用node.js寫的機器人混搭應(yīng)用(bot mashup)tocho,它使用了ircbot、logger、real-time websockets技術(shù)并支持搜索,但是處于開發(fā)的前期還比較粗糙。編寫這個程序給我?guī)砹撕芏鄻啡ぁN疫€沒有將搜索功能發(fā)布到演示網(wǎng)站,您以使用支持web socket的瀏覽器訪問實時聊天室#node.js。

原文:http://www.grati.org/?p=318


文章標題:揭秘Node.js事件
文章鏈接:http://m.5511xx.com/article/coejsdg.html