我可以在Sequelize中将属性的获取程序定义为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属性中有一个空对象。
我想那是因为不支持异步功能,我错了吗?
在不使用异步功能的情况下如何实现?
根据文档, getter和setter不支持任何形式的异步。它们是同步的。因此,无法使用异步功能(因为我们需要Promise支持)。
而且,这里是一个线程对这个话题的讨论。而且它证实了此功能不打算在将来增加。
您可以改为扩展模型并添加实例级别方法。该文档将其称为virtual getter
。请看这篇文章。
您也可以制作它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 '';
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句