我让我的Request
对象将各个 HTTP 请求排队,并使用process.nextTick
. 但是,我收到一个我不知道如何解决的错误:
node.js:244
callback();
^
TypeError: undefined is not a function
at process.startup.processNextTick.process._tickCallback (node.js:244:9)
我不确定我做错了什么。这是相关的课程。
var Request = function() {
return this;
};
Request.prototype = {
queue_: []
};
Request.prototype.send = function(url, done) {
this.queue_.push(new QueueableRequest(url, done));
this.processRequest_();
}
Request.prototype.processRequest_ = function() {
if (this.queue_.length > 0) {
var request = this.queue_.shift();
var data = '';
http.get(request.url_, function(res) {
res.setEncoding('utf8');
res.on('data', function(chunk) {
data += chunk;
}).on('end', function() {
request.callback_(null, JSON.parse(data));
process.nextTick(this.processRequest_);
}).on('error', function(err) {
request.callback_(err, null);
process.nextTick(this.processRequest_);
});
});
}
}
我的另一个问题是这是否是减慢 HTTP 请求的好方法?我正在尝试做的是......我对线程列表(大约 15-20)发出 HTTP 请求,然后对于每个线程,我发出另一个请求以获取其回复。有时在回复中,我必须再次请求深度嵌套的回复。我最初的解决方案是简单地调用http.get
每个请求,但我发现我node.js
在几个请求后停止响应,我必须不断重新启动服务器并刷新页面。我的想法是我可能一次发送了太多请求,所以我尝试实现这个队列。