【发布时间】:2018-02-05 19:24:07
【问题描述】:
这不是我第一次遇到这个问题,但我总是设法找到解决方法,我想这很好,但现在我想了解如何改进。因此,在我的示例中,我有一个课程列表,我需要计算每个课程的平均评分:
var vm = this;
course.averageRating = vm.getAverageRating(course.id);
现在,什么不起作用:
vm.getAverageRating = function (courseId) {
let sum = 0, courses = [];
courseContext.getUserCourseFeedback(courseId).then(function(results){
courses = results;
});
courses.forEach(function (course) {
if(course && course.feedback_rating) {
sum += course.feedback_rating;
}
});
return courses.length > 0 ? sum / courses.length : null;
};
显然,courses.forEach 在应用程序实际从服务器下载 userCourses 列表之前触发,并且函数总是返回 null。
我的解决方法如下:
vm.averageRatings = {};
vm.getAverageRating = function (courseId) {
let sum = 0, courses = [];
courseContext.getUserCourseFeedback(courseId).then(function(results){
courses = results;
courses.forEach(function (course) {
if(course && course.feedback_rating) {
sum += course.feedback_rating;
}
});
vm.averageRatings[courseId] = courses.length > 0 ? sum/courses.length : null;
});
};
我相信这不是解决这个问题的最佳方法。在我的第一个示例中,我不能在 then 中使用 return 语句,我也不能在 promise 上使用 promise。如果你在我的位置,你会如何解决这个问题?
【问题讨论】:
-
“我不能在承诺上使用承诺”...?好吧,你可以;但你真的只需要
return你已经拥有的承诺。 -
我认为您提出的“解决方法”实际上是(其中一种)正确的方法。不是最优雅的,但正确的。
-
同样的问题,我想要更干净的代码结果
标签: javascript angularjs asynchronous promise angular-promise