2 votes

Trier les documents en utilisant une promesse avec mongoose

Quand je fais console.log(all), je m'attends à récupérer les données filtrées et triées mais je reçois plutôt l'intégralité des données d'origine. Pourquoi ?

var Comp = require("./models/company.js");
  var arr = [
    {name : "comp1",industry : "industry1", ranking: 20},
    {name : "comp2",industry : "industry2", ranking: 5},
    {name : "comp3",industry : "industry3", ranking: 10}
  ]

var output = {};  
var promise = Comp.find({}).exec()
  promise.then(function(docs){
        return Comp.remove({}).exec()
    })
    promise.then(function(){
            console.log("deleted")
        })
    promise.then(function(){
        return Comp.create(arr).exec()
    })
    promise.then(function(data){
        output.data = data;
        console.log(output)
    })
    promise.then(function(){
        return Comp.find({}, 'name -_id ranking', {sort :{ranking :1}}).exec();
    })
    promise.then(
        function(all){
            console.log("test")
            console.log(all)
        },
        function(error){
            console.log(error)
        }
    )
    promise.then(function(){
        return Comp.count({}, function(count){
            return count;
        });
    })
    promise.then(function(count){
        console.log("count")
        // console.log(count)
    })

ma question connexe.

2voto

jib Points 18592

Vous attachez tous les rappels .then à la même promesse. Ce n'est pas un enchaînement, mais un branchement.

Branchement :

var p = Promise.resolve(1);
p.then(foo);
p.then(bar); // n'attend pas foo. Appelle bar(1).

Pour enchaîner, attachez toujours à la dernière promesse.

Enchaînement :

var p = Promise.resolve(1);
p = p.then(foo);
p = p.then(bar); // attend foo. Appelle bar(résultat_de_foo).

ou simplement : Promise.resolve().then(foo).then(bar);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X