【发布时间】:2015-05-11 09:39:12
【问题描述】:
我有以下模型,假设它描述了一本书:
module.exports = {
attributes: {
name: {
type: 'String',
required: true
},
type: {
type: 'string',
required: true
},
book_id: {
type: 'integer'
}
}
}
这里的'type'属性是书的类型,例如HorrorBook。我对 HorrorBooks、FantasyBooks 等有一个单独的模型,因为模型的结构彼此差异很大,它们有其他没有的字段等,这就是为什么我不能只使用一个通用的 Book-模型。 HorrorBook、FantasyBook 等都有自己的“id”字段,这意味着可以同时存在具有相同 id 的 HorrorBook 和 FantasyBook。在创建这本书时,我有一个 beforeCreate 函数,它还会根据书的“类型”属性在 HorrorBook 或 FantasyBook 中创建一个条目。
我想要做的是,在从前端查询 Book 时,我想将这本书的相关信息包含在一个“信息”属性中,例如一个 HorrorBook 条目。
toJSON: function() {
var obj = this.toObject();
switch (obj.type) {
case 'HorrorBook':
HorrorBook.find({id: obj.book_id})
.exec(function(err, book_info) {
obj.book_info = book_info;
return obj;
})
}
}
但是,这会导致 toJSON 一直返回 null。我假设是异步查询使它太慢或什么的,所以它根本不会进入'return'调用。那么我该怎么办呢?有没有办法在我正在尝试的事情上取得成功,或者我应该以某种方式改变我的方法?
【问题讨论】:
标签: asynchronous sails.js waterline