Parse platform 在for循环中解析云代码查询

Parse platform 在for循环中解析云代码查询,parse-platform,parse-cloud-code,Parse Platform,Parse Cloud Code,我有一个名为friends的表,其中包含字段 userid和friendid 我想查询数据库以查找用户的朋友。通过使用以下代码,这可以正常工作: Parse.Cloud.define("searchfriend", function(request, response) { var query = new Parse.Query("friends"); query.equalTo("player", request.params.myid); query.find({ suc

我有一个名为
friends
的表,其中包含字段
userid
friendid

我想查询数据库以查找用户的朋友。通过使用以下代码,这可以正常工作:

Parse.Cloud.define("searchfriend", function(request, response) {
  var query = new Parse.Query("friends");
  query.equalTo("player", request.params.myid);
  query.find({
    success: function(results) {
      var listfreundids = [];
      for (var i = 0; i < results.length; ++i) {
        listfreundids[i] = results[i].get("friend");;
}
      response.success(listfreundids);
    },
    error: function() {
      response.error("error");
    }
  });
});
Parse.Cloud.define(“searchfriend”),函数(请求、响应){
var query=newparse.query(“朋友”);
query.equalTo(“player”,request.params.myid);
查询.查找({
成功:功能(结果){
var listfreundids=[];
对于(变量i=0;i

现在我无法找到与friendid匹配的用户名,因为我无法在for循环中使用第二次查询来查询用户数据库…

您不必查询找到的每个好友id(效率低下)。相反,在获得好友ID列表后,您可以通过发送带有query.containedIn约束的好友ID列表来查询用户数据库。此策略实际上会减少查询计数。根据检索到的结果,您可以获得朋友(以前找到的)信息。还有一件事要记住,操作执行后呼叫响应成功。希望这能有所帮助


问候。

使用承诺,您可以将其分成几个单独的部分。承诺使用起来非常棒,也非常容易创建自己的承诺

我要做的是将其分解为一个查找朋友ID的查询,然后是一个查找朋友的查询

Parse.Cloud.define("searchfriend", function(request, response) {
  getFriendIDs(request.params.myid).then(function(friendIDs) {
    return getFriendUserNames(friendIDs);
  }).then(function(friends) {
    response.success(friends);
  }), function(error) {
    response.error(error);
  });
});

// function to get the IDs of friends
function getFriendIDs(myID) {
  var promise = new Parse.Promise();

  var query = new Parse.Query("friends");
  query.equalTo("player", myID);
  query.find().then(function(friendIDs) {
    promise.resolve(friendIDs);
  }, function(error) {
    promise.reject(error);
  });

  return promise;
}

// function to get the friends from a list of IDs
function getFriendUserNames(friendIDs) {
  var promise = new Parse.Promise();

  var query = new Parse.Query("_User");
  query.containedIn("id", friendIDs);

  query.find().then(function(friends) {
    // here I am just returning the array of friends
    // but you can pull the names out if you want.
    promise.resolve(friends);
  }, function(error) {
    promise.reject(error);
  });

  return promise;
}
您也可以始终使用匹配查询

// function to get friends
function getFriends(myID) {
  var promise = new Parse.Promise();

  var friendQuery = new Parse.Query("friends");
  friendQuery.equalTo("player", myID);

  var userQuery = new Parse.Query("User");
  userQuery.matchesKeyInQuery("ID", "friendID", friendQuery);

  userQuery.find().then(function(friends) {
    promise.resolve(friends);
  }, function(error) {
    promise.reject(error);
  });

  return promise;
}
这将执行一个联合查询,首先获取好友ID,然后使用好友ID获取用户并返回用户对象

此外,使用承诺。它们更易于使用,并且可以拆分为单独的工作单元


当然,我不知道这里的语法是否正确,正确的名称应该是什么,甚至不知道您的对象模型是什么样子,但希望这能起到指导作用。

hi Fogmeister,谢谢您的回复。不幸的是,上面的代码只返回[],我不知道从哪里开始,因为调试云代码几乎是不可能的。您可以使用console.log()进行调试,它将在线打印。您是否在错误日志中看到任何错误?另外,您是否确保我编写的代码对您的对象模型有效?我已经尝试了console.log(),输出如下:I2015-05-22T10:29:00.994Z]v58为用户Ln9sP86iWk运行了云函数searchfriend,输入:{“myid”:“Ln9sP86iWk”}结果:[I2015-05-22T10:29:01.021Z]{“已解决”:false,“已拒绝”:false,“_resolvedCallbacks”:[],“_rejectedCallbacks”:[]}I2015-05-22T10:29:01.073Z]{“_resolved:false”,“_rejected:false”,“_resolvedCallbacks”:[],“_rejectedCallbacks”:[]}你检查了第一次查询的结果了吗?数组中有朋友ID吗?然后你检查了传递给函数的参数是否正确了吗?等等…Tbh我不是JS方面的专家,当我可以看到结果时,我需要几次尝试才能使其正确。看看Parse中的JS文档,看看你是否可以我不能为你写代码,但我给了你90%的方法。