2017-10-07 2 views
0

Je veux que mon contrôleur de voiles pour effectuer ces étapes:Changer plus d'une table via le contrôleur de voiles

mot -Ajouter à la table Mot

-Prendre ID du mot créé et ajoutez-le aux côtés de l'ID de leçon à un table différente

module.exports = { 
    add: function(req,res){ 
     var eng=req.param('english'), 
      pol=req.param('polish'), 
      lessonID=req.param('lessonID'); 
     var wordID=this.create(eng,pol,lessonID); 
     console.log(wordID); 
    }, 

    create: function(eng,pol,lessonID){ 
      sails.models.word.create({ 
       english:eng, 
       polish:pol}) 
      .exec(function (word){ 
      return word.id 

    }); 
} 
}; 

Je ne suis pas sûr comment retourner le motID à la fonction d'ajout. En ce moment, wordID est 'indéfini'. Je l'ai essayé de changer la déclaration de créer à:

create(req,res) 

puis retour

res.json(200, { id: word.id }); 

mais cela n'a rien changé. Quelle est la bonne façon de traiter les fonctions de ce type?

Répondre

2

Vous avez mal compris la nature asynchrone de javascript. Console.log sera exécutée immédiatement après la ligne précédente. L'opération de la base de données ne sera pas terminée d'ici là. Vous devez modifier la méthode create pour accepter un rappel qui doit être exécuté une fois l'opération db terminée.

add: function(req,res){ 
     var eng=req.param('english'), 
      pol=req.param('polish'), 
      lessonID=req.param('lessonID'); 
     this.create(eng,pol,lessonID, (wordID) => { 
      console.log(wordID); 
      return res.json({wordID}); 
     }); 
    }, 

    create: function(eng,pol,lessonID, callback){ 
      sails.models.word.create({ 
       english:eng, 
       polish:pol}) 
      .exec(function (word){ 
      return callback(word.id); 

    }); 
} 
+0

Il reste encore quelques problèmes à résoudre ... comme 'var motID' sera toujours indéfini car la fonction de création elle-même ne retourne pas. Et puisque 'add' accepte' (req, res) ', il est probablement supposé faire quelque chose avec' res' comme 'res.send', etc, et il devrait le faire dans callback de' create'. – arbuthnott

+0

@arbuthnott mon mauvais, juste copié collé le code. J'ai oublié de supprimer l'assignation de variable. Merci de l'avoir signalé. – MjZac