繁体   English   中英

Parse上的社交网络拥有1000多个关注者。 如何获得所有人的最新帖子?

[英]Social network on Parse having more than 1000 followers. How to get latest posts for all?

我们正在基于Parse的AnyPic教程构建一个社交网络应用。

Anypic使用以下代码从关注者那里获取最新帖子:

    PFQuery *followingActivitiesQuery = [PFQuery queryWithClassName:kPAPActivityClassKey];
    [followingActivitiesQuery whereKey:kPAPActivityTypeKey equalTo:kPAPActivityTypeFollow];
    [followingActivitiesQuery whereKey:kPAPActivityFromUserKey equalTo:[PFUser currentUser]];
    followingActivitiesQuery.cachePolicy = kPFCachePolicyNetworkOnly;
    followingActivitiesQuery.limit = 1000;

    PFQuery *autoFollowUsersQuery = [PFUser query];
    [autoFollowUsersQuery whereKey:kPAPUserAutoFollowKey equalTo:@YES];

    PFQuery *photosFromFollowedUsersQuery = [PFQuery queryWithClassName:self.parseClassName];
    [photosFromFollowedUsersQuery whereKey:kPAPPhotoUserKey matchesKey:kPAPActivityToUserKey inQuery:followingActivitiesQuery];
    [photosFromFollowedUsersQuery whereKeyExists:kPAPPhotoPictureKey];

    PFQuery *photosFromCurrentUserQuery = [PFQuery queryWithClassName:self.parseClassName];
    [photosFromCurrentUserQuery whereKey:kPAPPhotoUserKey equalTo:[PFUser currentUser]];
    [photosFromCurrentUserQuery whereKeyExists:kPAPPhotoPictureKey];

    PFQuery *query = [PFQuery orQueryWithSubqueries:[NSArray arrayWithObjects:photosFromFollowedUsersQuery, photosFromCurrentUserQuery, nil]];
    [query setLimit:30];
    [query includeKey:kPAPPhotoUserKey];
    [query orderByDescending:@"createdAt"];

如您所见,这段代码将仅获得前1000个关注者及其帖子。 但是我们想考虑一个用户关注超过1000个用户的可能性。 在留在Parse的查询限制中时,从我关注的人那里获取所有最新帖子的最佳方法是什么?

PS:当我搜索Google时,遇到了一个建议,告诉我们可以将lastPostedAt变量存储到_User对象,并根据此变量对查询进行排序。 但是,即使不太可能,我追踪的每个用户也有可能最近发布过。

您应该进行一个循环,在该循环中它会自动跳过已获取的对象。 这可以在解析的cloudcode中完成。

看下面的例子:

Parse.Cloud.job("fetchMenus", function(request, status) {
  var LocationSP, counter, query;
  counter = 0;
  LocationSP = Parse.Object.extend("Location");
  query = new Parse.Query(LocationSP);
  query.doesNotExist("menu");
  query.equalTo("city_lc", "new york");
  return query.each(function(location) {
    if (counter % 100 === 0) {
      status.message(counter + " users processed.");
    }
    return Parse.Cloud.run('getMenu2', {
      alias: location.get("location_id")
    }).then(function(result) {
      counter += 1;
      return Parse.Promise.as("1");
    }, function(error) {
      return Parse.Promise.as("1");
    });
  }).then(function() {
    return status.success("Migration completed successfully.");
  }, function(error) {
    return status.error("Uh oh, something went wrong." + error);
  });
});

从此线程Parse.com中获取:query.each在parrallel中执行,达到限制

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM