27

node.jsとjavaスクリプトは初めてですが、この「.on」キーワードの意味がわかりません。別の単語コードで変更すると失敗しました。

var req = http.get("http://www.google.com", function(res) {
  console.log("Got response: " + res.statusCode);

 res.on('data', function (chunk) {
});

}).on('error', function(e) {
console.log("Got error: " + e.message);
 });
4

3 に答える 3

36

onメソッドは、イベントをオブジェクトにバインドします。

これは、何かが起こった場合(データの送信またはエラーの場合)に意図を表現し、パラメーターとして追加された関数を実行する方法です。このスタイルのプログラミングは、イベント駆動型プログラミングと呼ばれます。ウィキペディアで調べてみてください

node.jsには、EventEmitterというクラスがあり、基本的なイベントを独自のコードで使用する場合に必要なすべてのコードを提供します(node.jsの場合はこれを強くお勧めします)。node.jsEventEmitterのドキュメントはこちら

于 2012-10-15T16:49:27.070 に答える
11

.onは、イベントハンドラーをバインドするために使用するメソッドです。

于 2012-10-15T09:30:56.487 に答える
8

http.getのコールバックは、(名前を付けた)単一の引数で呼び出されますreqreq、「request」の略で、この引数はhttp.ClientRequestオブジェクトであるため、一般名です。http.ClientRequestオブジェクトはstream.Writableを実装します。重要な点は、すべてのストリームがEventEmitterのインスタンスであるということです。

EventEmitterには、onと呼ばれる関数があり、指定されたイベントのリスナー関数を追加します。

「リスナー機能」は「コールバック機能」の別名です。

あなたの例では、dataイベントとイベントのリスナーを追加しましたerror。リスナー関数は、EventEmitterによって呼び出されます(「コールバック」という用語を使用します)

追加クレジット

リスナーがリスニングを停止する必要がある場合(つまり、コールバックが呼び出されたくない場合)、emitter.removeListener関数を使用してリスナーを削除できます。

var myCallback = function(e) { console.log('Got error: ' + e.message); }
res.on('error', myCallback);
// do some things...
res.removeListener('error', myCallback);

リスナーを1回だけ実行する場合は、関数の代わりにemitter.onceを使用できます。そうすれば、リスナーをon削除する必要はありません。

res.once('error', myCallback);
于 2017-08-17T17:28:46.600 に答える