2017-10-07 84 views
0

我希望我的船帆控制器執行這些步驟更改多個表不同的表格通過帆控制器

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 

    }); 
} 
}; 

我不知道如何將wordID返回到add函數。現在wordID是'未定義'。我試着改變創建的聲明:

create(req,res) 

,然後返回

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

但它並沒有改變任何東西。處理這種功能的正確方法是什麼?

回答

2

您誤解了javascript的異步本質。

var wordID=this.create(eng,pol,lessonID); 
console.log(wordID); 

Console.log將在上一行之後立即執行。到那時數據庫操作將不會完成。您需要更改create方法以接受一次數據庫操作完成後需要執行的回調。

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

仍然有一些問題需要清理......比如'var wordID'仍然是未定義的,因爲create函數本身不會返回。由於'add'接受'(req,res)',它可能應該像'res.send'等那樣用'res'做一些事情,並且它應該在'create'的回調中做到這一點。 – arbuthnott

+0

@arbuthnott我的壞,只是複製粘貼的代碼。忘記刪除變量賦值。感謝您指出。 – MjZac