【问题标题】:Sails/waterline : getting promise values in templateSails/waterline:在模板中获取承诺值
【发布时间】:2017-08-10 10:06:18
【问题描述】:

我有两个模型:User,通过与 Member 的一对多引用关联。

我想从Member 模型中检索User 的名字和姓氏,所以我添加了一个函数getNameMember,它将首先填充“用户”字段然后返回从这样的模板调用时的值:

<p><%= data.members[i].getName() %></p>

但我只在模板中得到“未定义”(而我可以从 getName 函数内部在控制台中打印好的值)。我猜这是因为我必须查询基数,所以 getName 会异步并返回一个 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;
      });
    }
  }
}

有人可以告诉我我的代码有什么问题吗?

附: :这可以通过从控制器而不是模型填充“用户”字段来解决,但我有另一个类似这样的问题,它遵循相同的原则。

【问题讨论】:

标签: promise sails.js ejs waterline


【解决方案1】:

您的怀疑是正确的——您不能在视图模板中调用异步函数,因为这些模板是同步呈现的。正如您在“附言”中所说,正确的答案是在控制器中收集所有模板数据,然后将其发送到单个对象中的视图。

【讨论】:

    猜你喜欢
    • 2018-06-04
    • 2018-12-24
    • 2017-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    相关资源
    最近更新 更多