Getting a process.tick error when trying to queue up http requests

I made my Request object queue up individual HTTP requests and process them one by one using process.nextTick. However, I am getting an error that I don't know how to solve:

node.js:244
        callback();
        ^
TypeError: undefined is not a function
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

I'm not sure what I am doing wrong. Here is the relevant class.

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_);
            });
        });
    }
}

My other question is whether this is a good method to slowing down my HTTP requests? What I am trying to do is this... I make an HTTP request for a list of threads (about 15-20), and then for each thread, I make another request to obtain its replies. Sometimes within replies, I have to make another request for the deeply nested replies. My initial solution was simply call http.get for every request, but I find that my node.js stops responding after a few requests and I have to keep restarting the server and refreshing the page. My thought was that I am perhaps sending too many requests at once, so I tried to implement this queue.

Your this inside your event handlers is incorrect, so your this.processRequest_ is undefined.

Request.prototype.processRequest_ = function() {
    // Assign the outer request object to a variable so you can access it.
    var self = this;

    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(function(){
                    // Call 'processRequest_' on the correct object.
                    self.processRequest_()
                });
            }).on('error', function(err) {
                request.callback_(err, null);
                process.nextTick(function(){
                    // Call 'processRequest_' on the correct object.
                    self.processRequest_()
                });
            });
        });
    }
}

That said, you might consider using the request module to simplify this.

var request = require('request');

Request.prototype.processRequest_ = function() {
    var self = this;
    if (this.queue_.length > 0) {
        var requestData = this.queue_.shift();
        request(requestData.url_, function(error, response, body){
            requestData.callback_(err, err ? null : JSON.parse(body));
            process.nextTick(function(){
                self.processRequest_();
            });
        });
    }
};