Ember 中的多个 Promise 不会在模板中解析

Multiple Promises in Ember won't resolve in the template

我一直在尝试 return 一堆承诺的价值。

解释一下情况:有 4 个模型 - 中的 学生 分数 每个 objective.

所以我制作了一个组件,我将 objectivegroup 传递到其中。该组件然后处理对商店的请求,以查找每个学生的 score objective,return平均。

代码似乎有效,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;
    });
}),

组件的模板然后简单地 returns averageScore.

谢谢

Computed 属性 不支持 promise。所以不要 return computed 属性 中的 Promise 并且通常不要在 computed 属性.

中做任何设置

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

如果您仍然想让计算 属性 知道承诺,请遵循此 ember igniter link