2017-08-10 21 views
0

我有兩個模型:User,與Member的一對多參考相關聯。帆/水線:在模板中獲得承諾值

我想從Member模型檢索User中的firstName &姓氏,讓我添加了一個功能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; 
     }); 
    } 
    } 
} 

有人可以幫我告訴我什麼是錯我的代碼?

P.S. :這可以通過從控制器中填充'user'字段來解決,而不是從模型中解決,但是我有另一個像這樣的問題,它會遵循相同的原則。

+0

它看起來像這個問題:https://stackoverflow.com/questions/22823796/sails-js-get-async-data-from-an-ejs-file?rq=1在我的情況不是很有希望.. 。 – Paul

回答

0

您的猜疑是正確的 - 您無法在視圖模板中調用異步函數,因爲這些模板是同步呈現的。正如您在「p.s.」中所述,正確答案是將所有模板數據收集在控制器中,然後將其發送到單個對象的視圖中。