2017-10-07 55 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