请教如何使用sails完成数据插入
发布于 8 年前 作者 yahveyeye 4017 次浏览 来自 问答

目前我在学习sails,现在有个更新数据库的需求,就是从excel文件读取数据,根据所读取的数据更新数据库。基本思路是每读取出一条数据后更新数据库。代码如下: result.forEach(function(userPreference){ // 读取出来的数据类似 <u> { email:‘test@qq.com’, data:‘test’} </u> 这样的json对象 User.findOne({email:userPreference.email}).exec(function (err, finn){ //从User集合查找user对象 user=finn; } ); if(user){ //如果查找到则查找Preference集合的数据,将这两者关联起来 Preference.findone(user).exec(function (err,found) {
user.preferences.add(preference); user.save(function(err) { return res.serverError(err); }); } }

但是在执行过程,user的值总是为null。 我想原因是由于model.findOne方法是异步执行。请教一下正确的编程方式。

3 回复

你可以吧判断写到回调里面或者用async/q写

‘’’ result.forEach(function(userPreference){ // 读取出来的数据类似 { email:‘test@qq.com’, data:‘test’} 这样的json对象 User.findOne({email:userPreference.email}).exec(function (err, finn){ //从User集合查找user对象 user=finn; if(user){ //如果查找到则查找Preference集合的数据,将这两者关联起来 // 根据一个对象查询????,这应该有个外键关系吧 Preference.findone(user).exec(function (err,found) {

user.preferences.add(preference); user.save(function(err) { return res.serverError(err); }); } } );

谢谢楼上的兄弟。

我最终做出来了,可以工作,但是不完美,代码如下: result.forEach(function(userPreference){ Preference.findOne({category:userPreference.preference}).then(function (category){ if (!category) { sails.log(‘Could not find’+userPreference.preference+’, sorry.’); } else { User.findOne({email:userPreference.email}).then(function (user) { user.preferences.add(category); // Save the user and associations in the join table user.save(function(err) { ** //如果此处错误,我期望能够终止执行,在前端出现错误提示,可是出错时有日志,前台始终没有错误信息** sails.log(err); return res.json({ error: err }); }); }); } }) .catch(function (err) { sails.log(err); return res.status(500).json({ error: err }); }); });

	还有个问题就是关于model.findOne这个方法的,文档上的写法是User.findOne(2).exec(function(err, user) {
     });  我使用的then方法是参考了别的代码的,这就让我很困惑,到底什么情况下可以使用then方法,我知道这跟promise框架有关,但是文档里不需要提吗?
回到顶部