尝试:
以下是我试图运行的代码。
models.user.findAll({})
.then(function (users) {
for (var i = 0; i < users.length; i++) {
var userName = users[i].name;
var userEmail = users[i].email;
models.trip.findOne({ attributes: [ [userName, 'name'], [userEmail, 'email'], 'id' ], where: { userId: users[i].id } })
.then(function (trip) {
if (trip == null) {
//Send Emails
}
});
}
})
.catch(function (error){ // enter code here
console.log(">>>>>",error);
});
由于回叫,第二个Sequelize无法正常运行。
您能否就如何解决此问题提出建议?它是否使用asyncawait / coyield?
答案 0 :(得分:0)
您应该使用console.log进行调试。首先你应该尝试打印你的第一个回调结果,可能是数据库连接没有正确配置,可能是表是空的。原因很多。使用.forEach方法代替'for'循环
也更舒服array.forEach((item, i, arr)=>{
///....
})
答案 1 :(得分:0)
不要在for和any循环中使用async方法。最好使用Promise.all或任何异步库。 代码就是这样。
var tasks = []
users.forEach(function (user) {
tasks.push(models.trip({/*some attrs*/}).then(function (trip){
if (trip) return Promise.resolve()
return sendEmailPromise(user)
}))
})
Promise.all(tasks).then(function() {
//done
}).catch(errorHandler)
答案 2 :(得分:0)
如果模型有关联,那么您可以只包含其他模型并向其添加where子句。 Sequelize Docs
User.hasMany(Trips, {foreignKey: 'userId'});
User.findAll({
include: {
model: Trips,
where: {userId: id}
}
});