Async exception/error handling in Restify with Promises

I'm having an issue trying to issue Exceptions or follow the set paradigm by Restify for sending error responses. According to their documentation you can call next() or res.send() with an Error object and it will correctly bubble that up and return an error response.

The issue is that when using Q for promises and trying to throw a new Error object in the failure callback of then() or in catch() callback, it never works. Here is an example:

This is a Vendor module:

getDataSource: function() {
    var deferred = Q.defer();

    fs.readFile(dataFile, function(err, data) {
        if (err) {
            return deferred.reject(err);
        }

        try {
            var vendors = JSON.parse(data);

            deferred.resolve(vendors);
        } catch (caughtErr) {
            deferred.reject(new Error('Could not resolve data source'));
        }
    });

    return deferred.promise;
},

getById: function(id) {
    return this.getDataSource().then(function(vendors) {
        var vendor = _.find(vendors, function(v) {
            return v.id == id;
        });

        if (vendor) {
            return vendor;
        }

        throw new Error('There was no vendor with the supplied id');
    });
}

In my API endpoint:

function(req, res, next) {
    Vendor.getById(req.params.vendorId)
    .then(function(evt) {
        res.send(evt);
    })
    .catch(function(err) {
        next(err); // Doesn't work
        res.send(err); // Neither does this
    });
};

I can manually send an error structure back via res.send(); but I'd like to have a unified error return system, especially when I know Restify supports it.

What gives?