成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

揭秘Node.js事件

開發 前端
對于一些簡單的程序你可以不使用自定義事件,但這樣很難應對復雜的應用。那么如何編寫自定義事件?首先需要了解的是在node.js中的’events’模塊。

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

快速概覽

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

require(‘events’)

requires(‘events’).EventEmitter

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

dummy.js

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

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

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

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.  
  10.     return self;  

現在,這個模塊已經完成了。我們可以在主程序中使用它。

dummy-node.js

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

所以基本上,node.js執行腳本,然后等待’cooked’事件被觸發,并在事件觸發之后調用回調函數并傳遞返回的參數。

還有什么要注意的

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

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

結束之前的話

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

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

同時,你也可以看一下我用node.js寫的機器人混搭應用(bot mashup)tocho,它使用了ircbot、logger、real-time websockets技術并支持搜索,但是處于開發的前期還比較粗糙。編寫這個程序給我帶來了很多樂趣。我還沒有將搜索功能發布到演示網站,您以使用支持web socket的瀏覽器訪問實時聊天室#node.js。

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

【編輯推薦】

  1. Node.js初探之hello world
  2. Node.js初探之與Mysql的交互
  3. Node.js入門之神秘的服務器端JavaScript
  4. 什么是Node.js?
  5. 淺析Node.js:一個“編碼就緒”服務器
責任編輯:陳貽新 來源: 移動開發博客
相關推薦

2024-01-05 08:49:15

Node.js異步編程

2021-05-27 09:00:00

Node.js開發線程

2017-08-16 10:36:10

JavaScriptNode.js事件驅動

2013-11-01 09:34:56

Node.js技術

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2021-12-18 07:42:15

Ebpf 監控 Node.js

2011-11-01 10:30:36

Node.js

2011-09-02 14:47:48

Node

2011-09-09 14:23:13

Node.js

2011-11-10 08:55:00

Node.js

2012-10-24 14:56:30

IBMdw

2023-01-31 16:43:31

?Node.js事件循環

2021-12-25 22:29:57

Node.js 微任務處理事件循環

2015-06-23 15:27:53

HproseNode.js

2012-02-03 09:25:39

Node.js

2020-05-29 15:33:28

Node.js框架JavaScript

2020-10-26 08:34:13

Node.jsCORS前端

2021-04-06 10:15:29

Node.jsHooks前端

2024-07-08 08:53:52

2021-02-01 15:42:45

Node.jsSQL應用程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本激情一区二区 | 视频一区二区在线 | 国产日韩欧美在线观看 | 亚洲成人一区 | 水蜜桃久久夜色精品一区 | 国产精品国产a级 | 99久久精品免费看国产四区 | 日本三级精品 | 日本在线小视频 | 国产精品成人久久久久 | 午夜视频免费在线 | 亚洲综合中文字幕在线观看 | h网站在线观看 | 国产一二区视频 | www.成人免费视频 | 国产精品中文字幕在线 | 国产一区二区电影 | 亚洲国产精品久久久久秋霞不卡 | 91精品国产综合久久香蕉922 | 国产成人精品999在线观看 | 成人h动漫亚洲一区二区 | 欧美一区二区三 | 国产精品一区二区三区99 | 午夜免费网站 | 国产高清亚洲 | 国产激情视频 | 日本在线视频一区二区 | 久久久久久免费看 | 欧美区在线 | 久久91精品国产一区二区三区 | 97操操| 九九99久久 | 国产韩国精品一区二区三区 | 亚洲天堂av一区 | 亚洲va中文字幕 | 久久精品| 99热国产免费 | 日韩有码在线观看 | 成人精品免费 | 色约约视频 | 亚洲精品观看 |