2016-01-21 73 views
0

我想从Parse.com获取所有帖子,并检查每个人是否被当前用户喜欢。据我所知,内部查询不能在for循环内完成,因为它是一个异步函数。我不明白如何格式化它的方式,让我检查每个职位。我试过$ q.defer(),但它也没有工作。任何帮助将不胜感激for循环内的异步函数(解析查询)

var imageGallery = Parse.Object.extend("Gallery"); 
var query = new Parse.Query(imageGallery); 

query.include("user"); 
query.near("location", $rootScope.currentLocation); 
query.find({ 
    success: function(results) { 
    var i = 0; 
    for (i; i < results.length; i++) { 
     var object = results[i]; 

     var galleryLike = Parse.Object.extend("GalleryLike"); 
     var likeQuery = new Parse.Query(galleryLike); 

     likeQuery.include('gallery'); 
     likeQuery.include('user'); 
     likeQuery.equalTo('gallery', object); 
     likeQuery.equalTo('user', Parse.User.current()); 
     likeQuery.find({ 
     success: function(res) { 
      if (res.length == 0) { 
      var like = "false"; 
      } else { 
      var like = "true"; 
      } 
     }, 
     error: function(error) { 

     } 
     }); 

     var distance = object.get('location').kilometersTo($rootScope.currentLocation); 

     self.images.push({ 
     object: object, 
     locationName: object.get('locationName'), 
     caption: object.get('caption'), 
     img: object.get('img').url(), 
     username: object.get('user').get('username'), 
     userprofpic: object.get('user').get('profpic').url(), 
     distance: distance, 
     isLiked: like 
     }); 
    } 
    $scope.$apply(); 
    $ionicLoading.hide(); 
    }, 
    error: function(error) { 
    $ionicLoading.hide(); 
    } 
}); 
+0

包*的体内循环*自调用函数并粘贴*我作为参数*,应该帮助 –

+0

这样做给后面的查询结果中随机顺序,而不是靠近 –

回答

1

定义一个函数,它仅得到一个职位,说getPost()并返回一个承诺。 然后你可以使用$q.all()像以下:

var promises = [];  
for (var i < results.length; i++) { 
    promises.push(getPost(i)); 
} 
$q.all(promises) 
    .then(function(results){ 
     // results[i] is relevant to post #i 
    }); 
+0

我喜欢使用此方法的功能,但它的结果开始以随机顺序显示(每次屏幕刷新),而不是靠近。我将如何去保持他们最初的接近程度? –

+0

我认为这是因为每次刷新时都会随机放置结果中的项目。请检查。 –

+0

谢谢,我会研究它! –