代码之家  ›  专栏  ›  技术社区  ›  Atopus

帆/水线:在模板中获取承诺值

  •  0
  • Atopus  · 技术社区  · 8 年前

    我有两种型号: User ,由一对多引用关联 Member .

    使用者 成员 getName ,这将首先填充“user”字段,然后从以下模板调用时返回一个值:

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

    但我只能在模板中得到“未定义的”(而我可以从getName函数内部在控制台中打印好的值)。我想这是因为我必须查询基,所以getName是异步的,并返回一个承诺。

    以下是我的模型:

    /**
    * 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、 美国:这可以通过从控制器而不是模型中填充“user”字段来解决,但我还有另一个类似的问题,它遵循相同的原则。

    1 回复  |  直到 8 年前
        1
  •  0
  •   sgress454    8 年前

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