Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在$q.all解析后对对象数组进行排序_Javascript_Angularjs_Sorting_Angular Promise - Fatal编程技术网

Javascript 在$q.all解析后对对象数组进行排序

Javascript 在$q.all解析后对对象数组进行排序,javascript,angularjs,sorting,angular-promise,Javascript,Angularjs,Sorting,Angular Promise,使用AngularJs编写应用程序。我想检索用户加入的所有组的列表 我写了以下内容: controller('DashCtrl', function($scope, $q, $localStorage, AuthService, DatabaseService, GroupService) { console.log("*** DashCtrl ***"); var user = AuthService.currentUser; $scope.user = user; var u

使用AngularJs编写应用程序。我想检索用户加入的所有组的列表

我写了以下内容:

controller('DashCtrl', function($scope, $q, $localStorage, AuthService, DatabaseService, GroupService) {
  console.log("*** DashCtrl ***");
  var user = AuthService.currentUser;
  $scope.user = user;
  var uid = $scope.user.auth.uid;

  $scope.joinedGroups = [];

  var tmpGroups = [];
  var addGroupDetailsPromises = [];

  GroupService.getUserJoinedGroupsArray($scope.user.auth.uid)
  .then(function(groups) {
    for (var i = 0; i < groups.length; i++) {
      var tmpGroup = {};
      tmpGroup.id = groups[i];
      addGroupDetailsPromises.push(addGroupDetails(tmpGroup));
      tmpGroups.push(tmpGroup);
    }
  })
  .catch(function(error) {
    console.log('Error retrieving groups: ', error);
  });

  // Once all details have been added to groups, sort groups
  $q.all(addGroupDetailsPromises).then(function() {
    console.log(tmpGroups.length);
    tmpGroups.sort(function(a, b) {
      console.log('a: ', a.details.timestamp);
      console.log('b: ', b.details.timestamp);
      return a.details.timestamp - b.details.timestamp;
    });

    console.log(tmpGroups);
    $scope.joinedGroups = tmpGroups;
  }).catch(function(error) { console.log(error); });

  function addGroupDetails(tmpGroup) {
    var promise = new Promise(function(resolve, reject) {
      GroupService.getGroupDetailsObj(tmpGroup.id).then(function(details) {
        tmpGroup.details = details;
        tmpGroup.display = {};
        var eventDate = new Date(details.timestamp);
        var today = new Date();

        if (eventDate >= today) {
          tmpGroup.display.day = eventDate.getDate();
          tmpGroup.display.month = monthNames[eventDate.getMonth()].substr(0, 3);
          tmpGroup.display.time = eventDate.getHours() + ":" + eventDate.getMinutes();

        }

        resolve();
      });
    });

    return promise;
  };

  var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

})
controller('DashCtrl',function($scope,$q,$localStorage,AuthService,DatabaseService,GroupService){
console.log(“***DashCtrl***”);
var user=AuthService.currentUser;
$scope.user=用户;
var uid=$scope.user.auth.uid;
$scope.joinedGroups=[];
var tmpGroups=[];
var addGroupDetailsPromises=[];
GroupService.getUserJoinedGroupsArray($scope.user.auth.uid)
.然后(功能(组){
对于(变量i=0;i=今天){
tmpGroup.display.day=eventDate.getDate();
tmpGroup.display.month=monthNames[eventDate.getMonth()].substr(0,3);
tmpGroup.display.time=eventDate.getHours()+“:”+eventDate.getMinutes();
}
解决();
});
});
回报承诺;
};
var monthNames=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”];
})
我的组数组(tmpGroups)从未进行排序。根据my console.log(tmpGroups.length)的输出,数组的长度等于0。。。我想这就是为什么它从未被分类的原因

但我不理解结果,因为我的数组应该充满所有的信息,因为我使用了$q.all,它等待所有承诺得到解决

有什么建议吗


谢谢,这是因为GroupService.getUserJoinedGroupsArray是异步调用。您必须等待它完成,然后将列表推送到tmpGroups,然后执行承诺。试着把承诺放进去

GroupService.getUserJoinedGroupsArray($scope.user.auth.uid)
  .then(function(groups) {
    for (var i = 0; i < groups.length; i++) {
      var tmpGroup = {};
      tmpGroup.id = groups[i];
      addGroupDetailsPromises.push(addGroupDetails(tmpGroup));
      tmpGroups.push(tmpGroup);
    }

    // Once all details have been added to groups, sort groups
    $q.all(addGroupDetailsPromises).then(function() {
       console.log(tmpGroups.length);
       tmpGroups.sort(function(a, b) {
         console.log('a: ', a.details.timestamp);
         console.log('b: ', b.details.timestamp);
         return a.details.timestamp - b.details.timestamp;
    });

      console.log(tmpGroups);
     $scope.joinedGroups = tmpGroups;
    }).catch(function(error) { console.log(error); });
    })
  .catch(function(error) {
    console.log('Error retrieving groups: ', error);
  });
GroupService.getUserJoinedGroupsArray($scope.user.auth.uid)
.然后(功能(组){
对于(变量i=0;i
嘿,伙计们,我遇到了一个类似的问题……看起来几乎一样,是一个异步问题,但在返回控制器之前,无法确定我的排序需要在哪里对结果进行预排序。你能看一下吗?