我不确定如何为这个问题加上标题。

我想要做的是抓取大量电影,仅过滤出有评论的电影,然后按日期降序对评论进行排序,然后将列表修剪为仅抓取最新的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 //...
    });
},

10-06 12:27