我想获取一个 URI,对其进行解析,然后根据解析的数据获取另一个 URI。使用 restler,我想我可以从第一个 get 调用的 .on('complete',...) 函数进行解析和第二个 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 然后退出?
(顺便说一句:错误消息以“(节点)警告:可能的 EventEmitter 内存泄漏检测到添加了 11 个侦听器。使用emitter.setMaxListeners() 增加限制。”然后包含一些跟踪。错误消息并不让我感到惊讶似乎正在发生。)