Ember 中的多个 Promise 不会在模板中解析
Multiple Promises in Ember won't resolve in the template
我一直在尝试 return 一堆承诺的价值。
解释一下情况:有 4 个模型 - 组 中的 学生 有 分数 每个 objective.
所以我制作了一个组件,我将 objective 和 group 传递到其中。该组件然后处理对商店的请求,以查找每个学生的 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
,并在任何组件生命周期挂钩方法中编写代码。(可能是 init
或 didReceiveAttrs
钩)。您可以将结果设置为 averageScore
属性 this.set('averageScore',result)
.
如果您仍然想让计算 属性 知道承诺,请遵循此 ember igniter link
我一直在尝试 return 一堆承诺的价值。
解释一下情况:有 4 个模型 - 组 中的 学生 有 分数 每个 objective.
所以我制作了一个组件,我将 objective 和 group 传递到其中。该组件然后处理对商店的请求,以查找每个学生的 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
,并在任何组件生命周期挂钩方法中编写代码。(可能是 init
或 didReceiveAttrs
钩)。您可以将结果设置为 averageScore
属性 this.set('averageScore',result)
.
如果您仍然想让计算 属性 知道承诺,请遵循此 ember igniter link