Ember的多重承诺在模板

时间:2017-07-27 15:10:45

标签: ember.js promise ember-data

我试图回复一堆承诺的价值。

要解释这种情况:有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

由于

1 个答案:

答案 0 :(得分:1)

计算属性不承诺。因此,不要在计算属性中返回Promise,并且通常不会在计算属性中进行任何设置。

在您的情况下,您可以拥有名为averageScore的属性,并在任何组件生命周期钩子方法中编写代码。(可能是initdidReceiveAttrs挂钩)。您可以将结果设置为averageScore属性this.set('averageScore',result)

如果您仍希望将计算属性设置为承诺,请遵循此ember igniter link