URI を取得して解析し、解析したデータに基づいて別の URI を取得したいと考えています。restler を使用して、最初の get 呼び出しの .on('complete',...) 関数から解析と 2 番目の get 呼び出しを実行できると考えました。期待どおりに動作しないようです。調査するために、次のコードを作成しました。これは、コードの構造を非常に単純化したものです。Ctrl-C を押すまで終了しません。
var sys = require('util');
var rest = require('restler');
function UriCall( uri, handler ) {
rest.get(uri).on('complete', function(result) {
if (result instanceof Error) {
sys.puts('Error: ' + result.message);
}
else {
if (handler) { handler( result ); }
else { sys.puts('No handler provided.'); }
}
});
}
var uri = "http://www.google.com";
UriCall(uri, function(result) {
sys.print("@");
UriCall(uri, function(result) {
sys.print(".");
});
});
出力:
$node resttest.js
@@.@..@...@....@.....@......@.......@........@ [deleted error messages] .........@..........@...........@............@.............@..............@...............@................@.................@..................@...................@....................@.....................@......................@.......................@........................@.........................@..........................@...........................@............................@.............................@..............................@...............................@................................@.................................@..................................@................................... ^C
上記の出力から、呼び出しのたびに何かが積み重なっていき、どんどん深くなっていくように見えます。私は js/node/restler を使い始めたばかりの C/C++ です。プログラムが単純に UriCall を 2 回呼び出してから終了しないのはなぜですか?
(ところで:エラーメッセージは「(ノード)警告:EventEmitterメモリリークの可能性が検出されました。11個のリスナーが追加されました。エミッター.setMaxListeners()を使用して制限を増やしてください。」で始まり、いくつかのトレースが含まれています。エラーメッセージは何を考えても驚かない起きているようです。)