2016-06-19 9 views
0

Ich möchte einen Prozess liefern. Allerdings bekomme ich den Fehler: Sie können nur eine Funktion, ein Versprechen, Generator, Array oder Objekt, aber das folgende Objekt wurde übergeben: "undefined".Methode undefiniert? Ich kann keinen Ertrag verwenden

Nicht sicher warum.

Mungo Methode:

UserSchema.methods.comparePassword = function(candidatePassword, cb) { 
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) { 
    if (err){ 
     return cb(err); 
    } 
    cb(null, isMatch); 
}); 
}; 

Usage:

yield user.comparePassword(this.request.body.password, function(err, isMatch) { 
    console.log(isMatch); 
}); 

Der Fehler, wenn sie in Benutzung auftritt. Benutzer ist nicht null oder nicht definiert.

Antwort

3

Das Problem ist, dass comparePassword nichts zurückgibt, deshalb erhalten Sie einen Fehler über undefined.

Nehmen wir an, Sie möchten comparePassword ein Versprechen zurückgeben. Das bedeutet, dass Sie wickeln bcrypt.compare() müssen -die Rückrufe-mit einem Versprechen verwendet, und zurück, dieses Versprechen:

UserSchema.methods.comparePassword = function(candidatePassword) { 
    var user = this; 
    return new Promise(function(resolve, reject) { 
    bcrypt.compare(candidatePassword, user.password, function(err, isMatch) { 
     if (err) return reject(err); 
     resolve(isMatch); 
    }); 
    }); 
}; 

Dies ist, wie Sie es verwenden würde:

yield user.comparePassword(this.request.body.password); // no callback 
+0

Verstanden. Danke für die Klarstellung. – safaiyeh

Verwandte Themen