我不确定如何标题这个问题。
我想要做的是抓取大量电影,过滤掉那些有评论的电影,然后按照日期desc对评论进行排序,然后在设置第一个条目之前修剪列表以仅获取最新的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条评论,订单就会开始变得糟糕,我相信这是因为功能没有按顺序运行。但我不确定如何使用promises来确保在运行下一步之前完成一步。
答案 0 :(得分:1)
您应该使用promise chain来避免异步问题:
getLatestReviews(num) {
return this.getMovies().then(function(movieList) {
return movieList.filterBy('review');
}).then(function(reviewList) {
return //...
});
},