使用Ember js中的promises对一系列函数进行排序

时间:2016-06-17 12:12:34

标签: javascript ember.js promise

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

我想要做的是抓取大量电影,过滤掉那些有评论的电影,然后按照日期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来确保在运行下一步之前完成一步。

1 个答案:

答案 0 :(得分:1)

您应该使用promise chain来避免异步问题:

getLatestReviews(num) {
    return this.getMovies().then(function(movieList) {
       return movieList.filterBy('review');
    }).then(function(reviewList) {
       return //...
    });
},