我可以在Sequelize中将属性的getter定义为asyc函数吗?
在getter中我应该从另一个表中检索一个值,我在模型定义中尝试了这个:
...
bio: {
type: Sequelize.STRING,
get: async function() {
let bio = this.getDataValue('bio');
if (bio) {
let bestFriend = await db.models.User.findById(this.getDataValue('BestFriendId'))
if(bestFriend){
bio += ` Best friend: ${bestFriend.name}.`;
}
console.log(bio)
return bio;
} else {
return '';
}
}
},
...
记录我可以通过以下方式阅读正确的生物:
Born yesterday. Love to read Best friend: Markus
但我检索的对象在bio属性中有一个空对象 我想这是因为不支持异步功能,我错了吗?
如何在不使用异步函数的情况下实现此目的?
答案 0 :(得分:5)
根据documentation getter和setter不支持任何形式的异步。它们是同步的。所以没有办法使用异步函数(因为我们需要一个promise支持)。
这里还有一个thread,讨论了这个问题。并且已确认将来会添加此功能 。
您可以改为扩展模型并添加实例级方法。该文档将其称为virtual getter
。请参阅this article。
您也可以将其设为async
并访问模型数据。
BioModel.prototype.getBio = async function() {
let bio = this.getDataValue('bio');
if (bio) {
let bestFriend = await db.models.User.findById(this.getDataValue('BestFriendId'))
if(bestFriend){
bio += ` Best friend: ${bestFriend.name}.`;
}
return bio;
} else {
return '';
}
}