【问题标题】:Multiple Promises in Ember won't resolve in the templateEmber 中的多个 Promise 不会在模板中解析
【发布时间】:2017-07-27 15:10:45
【问题描述】:

我被困在试图返回一堆承诺的价值。

解释一下情况:有 4 个模型 - 中的学生对每个目标得分 /strong>。

所以我制作了一个组件,我将一个objectivegroup传递到其中。然后该组件处理对商店的请求,以查找每个学生针对该目标分数,并返回平均值。

代码似乎工作,console.logs 给了我我想要的,直到最后,但承诺不会解析到模板中 - 我得到 { object Object },我相信这是未解决的承诺。

我在这里遗漏了什么?等待多个 Promise 解决时是否需要额外的步骤?

我很欣赏这有点具体,当我理解答案时,我会尝试重新表述问题。

组件代码:

    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

谢谢

【问题讨论】:

    标签: ember.js promise ember-data


    【解决方案1】:

    计算属性不支持承诺。所以不要在计算属性中返回 Promise 并且通常不要在计算属性中进行任何设置。

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

    如果您仍然想让计算属性具有 Promise 意识,请遵循 ember igniter link

    【讨论】:

    • 本可以发誓我以前做过...猜不!完美的答案,感谢您的宝贵时间。使用 didReceiveAttrs 设置属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2018-01-24
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    相关资源
    最近更新 更多