2017-10-07 2 views
0

ich meine Segel-Controller möchten Sie diese Schritte ausführen:Ändern Sie mehr als eine Tabelle über Segel-Controller

-add Wort Word-Tabelle zu einem

-take die erstellten Wortes ID und fügen Sie es neben ID mit Lektion verschiedene Tabelle

Ich bin mir nicht sicher, wie man die WordID zur Add-Funktion zurückgibt. Gerade jetzt ist wordID 'undefiniert'. Ich habe versucht, auf die Deklaration von erstellen zu ändern:

create(req,res) 

und dann zurück

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

aber es hat nichts ändern. Was ist der richtige Umgang mit Funktionen dieser Art?

Antwort

2

Sie haben die asynchrone Natur von Javascript falsch verstanden.

Console.log wird unmittelbar nach der vorherigen Zeile ausgeführt. Der Datenbankvorgang ist zu diesem Zeitpunkt noch nicht abgeschlossen. Sie müssen die create-Methode ändern, um einen Rückruf zu akzeptieren, der ausgeführt werden muss, sobald der db-Vorgang abgeschlossen ist.

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

Es gibt noch einige Probleme zu klären ... wie 'var wordID' ist immer noch undefiniert, weil die create-Funktion selbst nicht zurückgibt. Und da 'add'' (req, res) 'akzeptiert, sollte es wahrscheinlich etwas mit' res' wie 'res.send' usw. machen, und dies sollte beim Callback von' create' geschehen. – arbuthnott

+0

@arbuthnott meine schlechte, kopieren Sie einfach den Code eingefügt. Vergessen, die Variablenzuweisung zu entfernen. Danke, dass du es aufgezeigt hast. – MjZac

Verwandte Themen