我试图回复一堆承诺的价值。
要解释这种情况:有4个模型 - 组中的学生对每个目标<得分 < /强>
所以我制作了一个组件,我通过了目标和组。然后,该组件处理对商店的请求,以查找每个学生目标的得分,并返回平均值。
代码似乎工作,console.logs给了我我想要的东西,直到最后,但承诺不会解决到模板 - 我得到{object Object},我相信是未解决的承诺。
我在这里失踪的东西?等待多个承诺解决时是否需要额外的步骤?
我很欣赏这有点具体,当我理解答案时,我会尝试重新解释这个问题。
组件代码:
averageScore: Ember.computed(function(){
var students = this.get('group.students');
var objective = this.get('objective');
var store = this.get('store');
var _this = this;
// Create an array of promises of each student's scores
var promises = [];
students.forEach((student) => {
var studentId = student.get('id');
var objectiveId = objective.get('id');
var newPromise = store.queryRecord('snapscore', { 'student' : studentId, 'objective': objectiveId });
promises.pushObject(newPromise);
});
// When promises resolve, find and return the average
return Ember.RSVP.allSettled(promises).then(function(scores){
let scoreTotal = 0;
let scoreCount = scores.length;
console.log("Score count is " + scoreCount);
scores.forEach((score)=>{
console.log("Student's score is " + score.value.get('score'));
scoreTotal = scoreTotal + score.value.get('score');
});
console.log("ScoreTotal is " + scoreTotal);
var average = scoreTotal/scoreCount;
console.log(average);
console.log(typeof(average));
return average;
});
}),
组件的模板然后只返回 averageScore 。
由于
答案 0 :(得分:1)
计算属性不承诺。因此,不要在计算属性中返回Promise,并且通常不会在计算属性中进行任何设置。
在您的情况下,您可以拥有名为averageScore
的属性,并在任何组件生命周期钩子方法中编写代码。(可能是init
或didReceiveAttrs
挂钩)。您可以将结果设置为averageScore
属性this.set('averageScore',result)
。
如果您仍希望将计算属性设置为承诺,请遵循此ember igniter link