Am I using Q the right way or is there a better way to do what I'm doing?
.then(q.nmcall(user, 'nextCount'))



is wrong. The nextCount call does return a promise (and starts its execution right away), while then does expect a [callback] function. You'd rewrite it to

.then(function(result_of_resetcount) {
    return q.nmcall(user, 'nextCount');
})


or shorten it with nfbind/nbind:

.then(q.nbind(user.nextCount, user))