promise - 在 save() 完成之前 Sequelize 回调
问题描述
这是我的代码:
//Models definition
var User = sequelize.define('user', ...);
var Address = sequelize.define('address', ...);
var Club = sequelize.define('club', ...);
//Club scopes
scopes: {
withUser: {
include: [
{ model: User }
]
},
//Models associations
User.hasOne(Address);
Club.hasOne(User);
Club.hasOne(Address);
//Main
//Create address
var addressToCreate = {};
if(body.address) addressToCreate.address = body.address;
if(body.city) addressToCreate.city = body.city;
if(body.zipCode) addressToCreate.zipCode = body.zipCode;
//Get user from db
var user = await User.findByPk(body.user);
var clubToCreate = { name: body.name, phone: body.phone };
//Persist Address in db
return Address.create(addressToCreate)
.then(address => {
//Persist club in db
return Club.create(clubToCreate)
.then(club => {
//Associate User and Address to Club
club.setAddress(address);
club.setUser(user);
//Save club with associated models
return club.save()
})
.then(club => Club.scope('withUser').findByPk(club.id))
.then(club => { console.log(club); return club; })
})
在我的数据库中,表地址包含 userId 和 clubId,表 user 包含 clubId;
此代码似乎可以创建和关联模型。但是 console.log 显示的最终俱乐部显示 user: null
但是,在 db 中,表 user 中有良好的行,具有良好的外键,引用了俱乐部 ID
我的日志显示请求选择(来自 Club.findByPk)在更新(来自 club.save)之前完成。像 .then 在 promise 解决之前执行
对不起我的英语不好,希望有人可以帮助
解决方案
您正在使用async/await
但基于获取用户的代码将其与旧的承诺样式混合。下面是您的代码的async/await
样式副本,尽管您可能不需要重新获取club
对象等,因此请继续调试。
const address = await Address.create(addressToCreate);
let club = await Club.create(clubToCreate);
console.log('created club', club);
club.setAddress(address);
club.setUser(user);
await club.save();
console.log('saved club', club);
club = await Club.scope('withUser').findByPk(club.id);
console.log('reloaded club', club);
return club;
推荐阅读
- excel - Excel:将 B 列中的任何内容与 A 列中的全部内容部分匹配并返回是或否
- python - TypeError:“dict_keyiterator”对象不可下标 - Python 2
- r - 如何计算一行的列值大于另一行的列值的分组对数?
- python - 将大型 JSON 文件加载到数据框中
- unity3d - 关于ECS(Entity-Component-System)游戏编程中数据访问控制的问题
- python - 如何使用数组保存结果
- macos - 列出 MacOS 上的所有文件
- python - 我们如何发送for循环变量作为python中的函数参数
- c++ - 在 nlohmann json 中,如何将嵌套对象数组转换为嵌套结构向量?
- rust - 如果由原子操作门控,非原子写入是否可以安全读取?