【问题标题】:Async function inside of for loop (Parse Query)for 循环内的异步函数(解析查询)
【发布时间】:2016-01-21 20:58:08
【问题描述】:

我正在尝试从 Parse.com 获取所有帖子,并检查当前用户是否喜欢每个帖子。据我了解,内部查询无法在 for 循环内完成,因为它是一个异步函数。我不明白如何以允许我检查每个帖子的方式对其进行格式化。我试过 $q.defer() 但它也没有工作。任何帮助将不胜感激

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();
  }
});

【问题讨论】:

  • for 循环 的主体包裹在自调用函数中并将 i 作为参数粘贴,应该会有所帮助
  • 这样做会以随机顺序返回查询结果,而不是按邻近度

标签: javascript angularjs for-loop asynchronous parse-platform


【解决方案1】:

定义一个只得到一个帖子的函数,比如getPost(),它会返回一个promise。 然后你可以像下面这样使用$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
    });

【讨论】:

  • 我使用此方法获得了点赞功能,但结果开始以随机顺序(每次刷新屏幕)而不是接近度显示。我将如何让它们按最初的接近度排序?
  • 我认为这是因为每次刷新时结果中的项目都是随机放置的。请检查一下。
  • 谢谢,我会调查的!
猜你喜欢
  • 2019-04-07
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多