sequelize getter 方法中的异步表查询
Posted
技术标签:
【中文标题】sequelize getter 方法中的异步表查询【英文标题】:Async table query in sequelize getter method 【发布时间】:2016-12-02 19:35:45 【问题描述】:我有一个执行数据库查询的 sequelize 实例方法:
getPropertyDays()
const queryString = `
SELECT
state
FROM property_days
WHERE
DATE(day) = CURDATE() AND
property_id = :propertyId;`;
const replacements = propertyId: this.id;
return this.sequelize.query(queryString, replacements: replacements, type: sequelize.QueryTypes.SELECT);
,
被 getter 调用:
getterMethods:
propertyState()
var self = this;
const blockedDay = 'x';
const unavailableDay = 'u';
this.getPropertyDays().then(function(result)
var state = result[0]['state'];
if (self.prospect || state == unavailableDay)
return 'unavailable';
if (state == blockedDay)
return 'occupied';
else
return 'available';
);
,
问题是从 getter 返回的结果是未定义的,因为他无法在返回之前解决 promise。
由于我没有桌子的模型,我该如何解决这个问题?已经玩了一天了!
非常感谢。
【问题讨论】:
【参考方案1】:不会返回从this.getPropertyDays
返回的承诺吗?
getterMethods:
propertyState()
var self = this;
const blockedDay = 'x';
const unavailableDay = 'u';
return this.getPropertyDays().then(function(result)
var state = result[0]['state'];
if (self.prospect || state == unavailableDay)
return 'unavailable';
if (state == blockedDay)
return 'occupied';
else
return 'available';
);
,
【讨论】:
不是我的实验。例如,模型的 toJSON 将输出 promise 的属性与 promise 的解析值,这并不是很有帮助。以上是关于sequelize getter 方法中的异步表查询的主要内容,如果未能解决你的问题,请参考以下文章
sequelize getter 和 setter 是如何工作的?