angularjs + underscorejs承诺

时间:2015-10-09 16:36:26

标签: angularjs underscore.js promise

我有一张桌子,以ng-table为特色。 当我删除此表的某些元素时,我想刷新数据列表以更新我的表。

我写入服务的回复删除此代码

$q.all(_.reject($scope.tableParams.data, function(item){
  item._id == pid;
})).then(
  $scope.tableParams.reload()
);

我需要遵循此路径,因为_.reject是异步的,我使用了同步方式,我会在$scope.tableParams.reload()完成之前获得_.reject

_.reject($scope.tableParams.data, function(item){
      item._id == pid;
});

$scope.tableParams.reload();

但第一个代码不能满足我的策略。有什么办法吗?

已编辑

这是我的代码的一部分。通过这种方式,我填写了我的表格

$scope.tableParams = new ngTableParams({
        page: 1,
        count: 10
    }, {
        getData: function ($defer, params) {
            var queryParams = params.sorting();
            var page = params.page();
            var size = params.count();

            function initFilters(filters, queryParams){
                $scope.search = {};

                if("companyProfile" in queryParams && !("companyProfile" in filters)){
                    filters.companyProfile = ''
                    filters.companyProfile=$location.$$search["companyProfile"];
                    $scope.search.companyProfile = {};
                    $scope.search.companyProfile = filters["companyProfile"]; 

                }

                return filters;
            }

            var filters = angular.equals({}, params.filter()) ? initFilters(params.filter(), $location.$$search) : params.filter();

            partners.filter({filter: filters.companyProfile, page: page, per_page: size, start: filters.start, end: filters.end, sorting:params.sorting()}).$promise.then(
                function(response){
                    var result = response.hits.map(function(single){
                        single._source.raw_companyProfile = single._source.companyProfile;
                        single._source.raw_email = single._source.email;
                        return single._source;
                    });
                    var orderedData = params.sorting() ? $filter('orderBy')(result, params.orderBy()) : result;
                    $scope.$parent.total = response.total;
                    params.total(response.total);
                    $defer.resolve(orderedData);
                }, function (error){
                    console.log(error);
                }
            );


        }
    });

当我尝试更新$scope.tableParams.data并呼叫重新加载时,没有更新!

请帮助我!

1 个答案:

答案 0 :(得分:0)

转换"外部"承诺有角度的承诺,适当的函数是$q.when()https://docs.angularjs.org/api/ng/service/ $ q#when。

但拒绝并非异步,并且它不会返回承诺:请参阅http://underscorejs.org/#reject

我认为问题在于你假设它从$scope.tableParams.data中删除了元素。它没有。它返回一个不包含被拒绝元素的新数组。