Mongoose avec Bluebird promisifyAll - saveAsync sur l'objet de modèle résulte en un tableau en tant que valeur de promesse résolue
Je suis en utilisant bluebird est promisifyAll avec mangouste. Quand je l'appelle saveAsync (le promisified version de sauvegarde) sur un objet de modèle, la valeur résolue de la promesse est un tableau avec deux éléments. La première est celle de mon modèle enregistré objet, le second est le nombre entier 1. Pas sûr de ce qui se passe ici. Ci-dessous est un exemple de code pour reproduire le problème.
var mongoose = require("mongoose");
var Promise = require("bluebird");
Promise.promisifyAll(mongoose);
var PersonSchema = mongoose.Schema({
'name': String
});
var Person = mongoose.model('Person', PersonSchema);
mongoose.connect('mongodb://localhost/testmongoose');
var person = new Person({ name: "Joe Smith "});
person.saveAsync()
.then(function(savedPerson) {
//savedPerson will be an array.
//The first element is the saved instance of person
//The second element is the number 1
console.log(JSON.stringify(savedPerson));
})
.catch(function(err) {
console.log("There was an error");
})
La réponse que je reçois est
[{"__v":0,"name":"Joe Smith ","_id":"5412338e201a0e1af750cf6f"},1]
Je m'attendais à ce que le premier élément de ce tableau, que la mangouste modèle de la méthode save() retourne un objet unique.
Toute aide serait grandement appréciée!
source d'informationauteur winston smith
Vous devez vous connecter pour publier un commentaire.
Avertissement: Ce changement de comportement comme de bluebird 3 - dans bluebird 3 le code par défaut dans la question sera les travaux sauf argument sera transmis à promisifyAll.
La signature de
.save
's de rappel est:Car cela ne respecte pas le nœud de rappel de la convention de retourner une valeur, bluebird convertit le multi-valué de réponse dans un tableau. Le nombre représente le nombre d'éléments d'effet (1) si le document a été trouvé et mis à jour dans la base de données).
Vous pouvez obtenir sucre syntaxique avec
.spread
:Pourquoi ne pas tout simplement à l'aide de la mangouste intégré de promesse de soutien?
Lire plus sur le sujet:
http://mongoosejs.com/docs/promises.html