Node.jsベース23456:グローバルオブジェクト、コールバック関数、モジュール、イベント、読み書きファイル(同期、非同期)

6013 ワード

グローバルオブジェクト
同様に、ブラウザ内のwindowグローバル変数は、すべてのモジュールで使用できます.引用などは不要です.大域変数は、consolesetTimeoutrequire()などです.
グローバル変数はすべてのモジュールで使用できます.以下の変数はグローバル変数のように見えますが、実際はそうではありません.それらのスコープはモジュール内だけです.詳細はドキュメントを参照してください.
__dirname
__filename
exports
module
require()
コールバック関数
jsと同じです.
function callFunction(fun, name) {
    fun(name);
}

callFunction(function(name) {
    console.log(name + ' Bye');
}, 'mtt');
モジュール
大きなプロジェクトは必ずモジュールに分けられます.一般的には一つのファイルは一つのモジュールです.モジュールの使い方:外に露出するのは対象です.私たちはrequire()の時、受け取ったのも一つの対象です.だから、ap.jsもこのように書いてもいいです.
var stuff = require('./count');



console.log(stuff.counter(['ruby', 'nodejs', 'react']));
console.log(stuff.adder(3));//6.14
他のモジュールの変数(クローズド)count.jsを使うことができます.
var adder = function(a) {
    return `the sum of the 2 numbers is ${a+pi}`;
}

var pi = 3.14;

module.exports = {
    counter: function(arr) {
        return "There are " + arr.length + " elements in the array";
    },
    adder: adder
}
イベント
http://nodejs.cn/api/events.html
ほとんどのNode.jsコアAPIは、いくつかのタイプのオブジェクト(触発器、Emitter)が、関数(またはモニタ、Listener)を呼び出すためにネーミングイベントをトリガします.
例えば、net.Serverは、新しい接続があるたびにイベントをトリガし、fs.ReadStreamは、ファイルを開くときにイベントをトリガし、streamは、データ読み取り時にイベントをトリガする.
イベントをトリガすることができるすべてのオブジェクトは、EventEmitterクラスの例である.これらのオブジェクトは、1つまたは複数の関数を名前付きイベントに結びつけるeventEmitter.on()関数を有する.イベントの名前は通常、ラクダのピーク式の文字列です. EventEmitterオブジェクトがイベントをトリガすると、イベントに結びつけられたすべての関数が同期して呼び出される.
例として、簡単なEventEmitter例が、モニターをバインドしている.eventEmitter.on()は、イベントをトリガするためにモニターを登録するために使用される.
const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
  console.log('    ');
});
myEmitter.emit('event');
まとめ理解:
  • フリップフロップ(Emitter)は、モニタ(Listener)をトリガし、その後、関数が同期して呼び出される.
  • myEmitter.on('event'、()=>{}イベントと関数を結びつけるために使用されます.イベントをトリガするために
  • の例:eventEmitter.emit()は、新しい接続があるたびにイベントをトリガし、eventEmitter.emit()は、ファイルを開くときにイベントをトリガし、net.Serverは、データ読み取り時にイベントをトリガする.
    通信パラメータはfs.ReadStreamとモニターになります.
    http://nodejs.cn/api/events.h...
    eventEmitter.emiit()メソッドは、モニター関数に任意の数のパラメータを送ることができます.モニター関数が呼び出されると、thisキーワードは、モニターによって結合されたEventEmitterの例に向けられます.
    const EventEmitter = require('events');
    class MyEmitter extends EventEmitter{}
    const myEmitter1 = new MyEmitter();
    myEmitter1.on('exxx',function (a, b) {
        console.log(a, b, this, this===myEmitter1);
    })
    
    
    myEmitter1.emit('exxx','  a','  b')
    まとめ:
  • streamは、第二のパラメータから、そのパラメータをモニターバインディングの関数に伝達し、第一の始まりとします.
  • thisは、呼び出しeventEmitter.emit()の例
  • を表す.
    事件は一回きりです.thisを使用してモニターを登録すると、モニタは、イベント名をトリガするたびに呼び出しられる.
    const myEmitter = new MyEmitter();
    let m = 0;
    myEmitter.on('event', () => {
      console.log(++m);
    });
    myEmitter.emit('event');
    //   : 1
    myEmitter.emit('event');
    //   : 2
    onを使用して、最大一回まで呼び出すことができるモニターを登録してもいいです.イベントがトリガされた場合、モニターはキャンセルされ、再起動されます.
    const myEmitter = new MyEmitter();
    let m = 0;
    myEmitter.once('event', () => {
      console.log(++m);
    });
    myEmitter.emit('event');
    //   : 1
    myEmitter.emit('event');
    //    
    evnetsはコアライブラリで、直接eventEmitter.on() は手動でコードでイベントをトリガします.util(実用ツール)(nodejsコアツールライブラリ)http://nodejs.cn/api/util.htm...
    var events = require('events');
    var util = require('util');//nodejs   
    
    var Person = function(name) {
        this.name = name
    }
    
    util.inherits(Person, events.EventEmitter);
    // Person  events.EventEmitter(    ES6   extends   ),          ,       。
    var xiaoming = new Person('xiaoming');
    var lili = new Person('lili');
    var lucy = new Person('lucy');
    //       
    var person = [xiaoming, lili, lucy];
    
    person.forEach(function(person) {
        person.on('speak', function(message) {
            console.log(person.name + " said: " + message);//           
        })
    })
    
    xiaoming.emit('speak', 'hi');//             
    lucy.emit('speak', 'I want a curry');
    ファイルの読み書き(同期、非同期)
    ファイルシステム:http://nodejs.cn/api/fs.htmlfs モジュールは、標準POSIX関数のような方法でファイルシステムと相互作用するために使用されます.
    使用方法は以下の通りです.
    const fs=require('fs')は、すべてのファイルシステムの動作に同期と非同期の2つの形態がある.
    非同期
    非同期形式の最後のパラメータは完了時のコールバック関数です.コールバック関数に送るパラメータは具体的な方法によって異なりますが、最初のパラメータは異常に保たれます.動作が成功したら、最初のパラメータ(異常)はeventEmitter.once()またはrequire('events')です.
    const fs = require('fs');
    
    fs.unlink('/tmp/hello', (err) => {
      if (err) throw err;
      console.log('     /tmp/hello');
    });
    
    同期
    同期動作を使用すると、何らかの異常が直ちに投げ出され、nullを使用して異常を処理することができる.
    const fs = require('fs');
    
    try {
      fs.unlinkSync('/tmp/hello');
      console.log('     /tmp/hello');
    } catch (err) {
      //     。
    }
    同期同期同期の注意
    非同期の方法は、実行順序を保証することができない.したがって、以下の例は、undefinedtry/catchの前に完了する可能性があるので、エラーが発生する可能性がある.
    fs.rename('/tmp/hello', '/tmp/world', (err) => {
      if (err) throw err;
      console.log('     ');
    });
    fs.stat('/tmp/world', (err, stats) => {
      if (err) throw err;
      console.log(`    : ${JSON.stringify(stats)}`);
    });
             ,    fs.stat()    fs.rename()       :
    
    fs.rename('/tmp/hello', '/tmp/world', (err) => {
      if (err) throw err;
      fs.stat('/tmp/world', (err, stats) => {
        if (err) throw err;
        console.log(`    : ${JSON.stringify(stats)}`);
      });
    });