Ich bin stecken, versuchen, den Wert einer Reihe von Versprechen zurückzugeben.Mehrere Versprechen in Ember wird nicht in der Vorlage lösen
die Situation zu erklären: Es gibt vier Modelle - die Schüler s in einer Gruppe haben ein für jedes Ziel punkten.
Also habe ich eine Komponente, in denen ich ein Ziel und die Gruppe Pässe gemacht. Die Komponente verarbeitet dann die Anfragen an den Laden, um die Punkte jedes Schülers für das Ziel nachzuschlagen und den Durchschnitt zurückzugeben.
Der Code scheint zu funktionieren, die console.logs geben mir genau das, was ich will, bis zum Ende, aber die Versprechen werden nicht in die Vorlage aufgelöst - ich bekomme das {Objekt Object}, was ich glaube das ungelöste Versprechen.
Etwas fehlt mir hier? Ist ein zusätzlicher Schritt erforderlich, wenn auf mehrere Versprechungen gewartet werden muss?
Ich weiß, das ist ein wenig spezifisch, wenn ich die Antwort verstehe, werde ich versuchen und die Frage umformulieren.
Component Code:
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;
});
}),
der Vorlage Komponente gibt dann einfach averageScore.
Dank
ich es getan hätte schwören können, bevor ... denke nicht! Perfekte Antwort, danke für deine Zeit. Verwendet didReceiveAttrs, um die Eigenschaft festzulegen. – rjoxford