Latest web development tutorials

Moduł node.js Domain

Moduł narzędziem node.js Moduł narzędziem node.js

Node.js domeny (domena)uproszczenie asynchroniczny kod obsługi wyjątków, można złapać obsługi wyjątków try catch nie może uchwycić. Wprowadzenie modułu składni domen jest następująca:

var domain = require("domain")

Moduł domeny obsługiwać kilka różnych operacji IO grupie. zdarzenia i wywołania zwrotne do rejestracji domeny, gdy wystąpi zdarzenie błędu lub wygeneruje błąd, obiektów domeny zostanie powiadomiony, bez utraty kontekstu, ani prowadzić do błędów proceduralnych natychmiast uruchomione i process.on ( "uncaughtException") są różne.

Moduł domena może być podzielony na niejawna i wyraźne wiązanie Oprawa:

  • Niejawny oprawa: domena zmienna zdefiniowana w kontekście automatycznie zobowiązany do obiektów domeny
  • Wyraźne wiązania Zmienna nie zostało zdefiniowane w kontekście domeny kod związany sposób do obiektów domeny

sposób

Nie. Sposób i opis
1 domain.run (funkcja)
W kontekście uruchomić gama funkcji przewidzianych pośrednio wiążących wszystkich dyspozytora zdarzeń, czasomierzy i wniosek bazowego.
2 domain.add (emiter)
Wyraźne zwiększenie wydarzenie
3 domain.remove (emiter)
Usuń wydarzenie.
4 domain.bind (callback)
zwraca funkcja jest przewidzianych dla funkcji oddzwaniania owijki. Gdy wywołanie funkcji jest zwracany, wszystkie rzucone błędy zostaną skierowane na zdarzenia błędu w tej dziedzinie.
5 domain.intercept (callback)
I domain.bind (callback) jest podobna. Poza uchwyceniem błąd jest wyrzucane na zewnątrz, będzie przechwytywać obiekt Błąd zostaje przekazana do tej funkcji jako parametr.
6 domain.enter ()
Wprowadź kontekst asynchronicznego połączenia, zobowiązany do domeny.
7 domain.exit ()
Wyjdź z bieżącej domeny przełączenie kontekstu do innego łańcucha asynchronicznego połączenia. Odpowiada domain.enter ().
8 domain.dispose ()
Udostępnienie obiektu domeny, i uczynić tę część zasobów węzła proces odzyskiwania.
9 domain.create ()
Zwraca obiekt domeny.

nieruchomość

Nie. Nieruchomości i opis
1 domain.members
Tablica zegarów domen i emitera zdarzeń dołączył obiektu domeny.

Przykłady

Tworzenie main.js pliku, kod jest w następujący sposób:

var EventEmitter = require("events").EventEmitter;
var domain = require("domain");

var emitter1 = new EventEmitter();

// 创建域
var domain1 = domain.create();

domain1.on('error', function(err){
   console.log("domain1 处理这个错误 ("+err.message+")");
});

// 显式绑定
domain1.add(emitter1);

emitter1.on('error',function(err){
   console.log("监听器处理此错误 ("+err.message+")");
});

emitter1.emit('error',new Error('通过监听器来处理'));

emitter1.removeAllListeners('error');

emitter1.emit('error',new Error('通过 domain1 处理'));

var domain2 = domain.create();

domain2.on('error', function(err){
   console.log("domain2 处理这个错误 ("+err.message+")");
});

// 隐式绑定
domain2.run(function(){
   var emitter2 = new EventEmitter();
   emitter2.emit('error',new Error('通过 domain2 处理'));   
});


domain1.remove(emitter1);
emitter1.emit('error', new Error('转换为异常,系统将崩溃!'));

Ten kod jest wykonywany, wyniki przedstawiają się następująco:

监听器处理此错误 (通过监听器来处理)
domain1 处理这个错误 (通过 domain1 处理)
domain2 处理这个错误 (通过 domain2 处理)

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: 转换为异常,系统将崩溃!
    at Object.<anonymous> (/www/node/main.js:40:24)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:929:3

Moduł narzędziem node.js Moduł narzędziem node.js