我不确定如何为这个问题加上标题。
我想要做的是抓取大量电影,仅过滤出有评论的电影,然后按日期降序对评论进行排序,然后将列表修剪为仅抓取最新的11部电影,然后再设置要显示的第一条条目并返回然后到模型。但是,通过这些大量的调用,我注意到一些数据混乱不清,我相信这是由于所有调用同时运行所致。如何使用promises来构造它,以便在继续之前等待上一步完成?
getLatestReviews(num) {
const movieList = this.getMovies();
const reviewList = movieList.filterBy('review');
const indexList = this.sortReviewsByDate(reviewList);
const latestList = this.getSetAmountOfMovies(num, reviewList);
return this.setFirstReviewToFeatured(latestList);
},
sortReviewsByDate(arr, dir) {
dir = dir || 'desc';
return arr.sort(function(a,b) {
if (dir === 'desc') {
return a.review.date < b.review.date;
} else {
return a.review.date > b.review.date;
}
});
},
getSetAmountOfMovies(num, arr) {
const movieList = arr ? null : this.getMovies();
const trimmedList = arr ? arr.slice(0, num) : movieList.slice(0, num);
return trimmedList;
},
setFirstReviewToFeatured(arr) {
arr[0].isFeatured = true;
return arr;
},
我的经验是,一旦我超过10条评论,订购就开始摆脱困境,我相信这是由于功能未按顺序运行。但是我不确定如何使用Promise确保在执行下一步之前完成一个步骤。
最佳答案
您应该使用Promise链来避免异步问题:
getLatestReviews(num) {
return this.getMovies().then(function(movieList) {
return movieList.filterBy('review');
}).then(function(reviewList) {
return //...
});
},