Sails/waterline : 在模板中获取承诺值
Sails/waterline : getting promise values in template
我有两个模型:User
,通过一对多引用与 Member
相关联。
我想从 Member
模型中检索 User
的名字和姓氏,因此我向 Member
添加了一个函数 getName
,这将首先填充 'user' 字段,然后 return 从这样的模板调用时的值:
<p><%= data.members[i].getName() %></p>
但我只在模板中得到 "undefined"(而我可以从 getName 函数内部在控制台中打印好的值)。我想这是因为我必须查询基础,getName 会异步并且 return 是一个 Promise。
这是我的模型:
/**
* User.js
*/
module.exports = {
attributes : {
firstName : 'string',
lastName : 'string',
}
}
/**
* Member.js
*/
module.exports = {
attributes : {
user : {
model : 'User'
},
getName: function() {
return Member
.findOne({ id : this.id })
.populate('user')
.exec(function(err, member) {
if(err) return err;
return member.user.firstName +' '+ member.user.lastName;
});
}
}
}
有人可以告诉我我的代码有什么问题吗?
P.S。 :这可能会通过从控制器而不是模型填充 'user' 字段来解决,但我有另一个类似这个遵循相同原则的问题。
您的怀疑是正确的 -- 您不能在视图模板中调用异步函数,因为这些模板是同步呈现的。正如您在 "p.s." 中所述,正确的答案是在控制器中收集所有模板数据,然后将其发送到单个对象中的视图。
我有两个模型:User
,通过一对多引用与 Member
相关联。
我想从 Member
模型中检索 User
的名字和姓氏,因此我向 Member
添加了一个函数 getName
,这将首先填充 'user' 字段,然后 return 从这样的模板调用时的值:
<p><%= data.members[i].getName() %></p>
但我只在模板中得到 "undefined"(而我可以从 getName 函数内部在控制台中打印好的值)。我想这是因为我必须查询基础,getName 会异步并且 return 是一个 Promise。
这是我的模型:
/**
* User.js
*/
module.exports = {
attributes : {
firstName : 'string',
lastName : 'string',
}
}
/**
* Member.js
*/
module.exports = {
attributes : {
user : {
model : 'User'
},
getName: function() {
return Member
.findOne({ id : this.id })
.populate('user')
.exec(function(err, member) {
if(err) return err;
return member.user.firstName +' '+ member.user.lastName;
});
}
}
}
有人可以告诉我我的代码有什么问题吗?
P.S。 :这可能会通过从控制器而不是模型填充 'user' 字段来解决,但我有另一个类似这个遵循相同原则的问题。
您的怀疑是正确的 -- 您不能在视图模板中调用异步函数,因为这些模板是同步呈现的。正如您在 "p.s." 中所述,正确的答案是在控制器中收集所有模板数据,然后将其发送到单个对象中的视图。