So übergeben Sie ein drittes Argument mit Bluebird.js nodeify an einen Callback

Mit etwas Hilfe Ich bin zu folgendem Code gekommen, um zu versprecheneine passport.js Anmeldestrategie.

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var Promise = require('bluebird');
var bcrypt = require('bcrypt');
var db = require('./db').db; //users are stored in mongo

//I'm using bluebird.js for promises
var users = Promise.promisifyAll(db.users);
var compare = Promise.promisify(bcrypt.compare);


// This strategy is used by passport to handle logins
module.exports.localStrategy = new LocalStrategy(function(username, password, done) {
  users.findOneAsync({username: username}).bind({})
    .then(function(user) {
        if (!user) {
          throw new NoMatchedUserError('Incorrect username.');
          //should be equivalent to:
          // return done(null, false, {message:'something'});
        }
        this.user = user;
        return compare(password, user.password);
    })
    .then(function(isMatch) {
      if (isMatch) {
        return this.user;
        //is equivalent to:
        // return done(null, this.user);
      }
      else {
        throw { message: 'Incorrect password.' };
        //should be equivalent to:
        // return done(null, false, {message:'something else'};
      }
    })
    .nodeify(done);
});

telefonischknoten (erledigt) Ich kann mit dem Pfad umgehen, in dem die Passwörter übereinstimmen, aber ich weiß nicht, wie ich den optionalen dritten Parameter weitergeben soll, damit passport.js ihn verwenden kann.

Können die beiden Fehlerpfade (nicht Fehlerpfade) behandelt werden?

Aktualisieren:

Wie in den Kommentaren gefragt, habe ich ein Problem mit Github erstellt und dieses Feature wurde (sehr schnell) in Bluebird v2.0 hinzugefügt

https://github.com/petkaantonov/bluebird/issues/219

Antworten auf die Frage(3)

Ihre Antwort auf die Frage