我有一个名为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");
}
});
});
现在我有问题找到与friendid匹配的用户名,因为我无法在for循环中使用第二个查询来查询用户数据库......
答案 0 :(得分:1)
使用promises,你可以将它分成几个独立的部分。承诺真的很棒使用,也非常容易创建自己的承诺。
我要做的是将其拆分为查找朋友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获取用户并返回用户对象。
另外,使用promises。它们更易于使用,可以拆分为单独的工作单元。
当然,我不知道这里的语法是否正确以及正确的名称应该是什么,甚至是对象模型的样子,但希望这可以作为指导。
答案 1 :(得分:0)
您不必查询您找到的每个朋友ID(效率低下)。相反,在获取朋友ID列表后,您可以通过使用query.containedIn约束发送朋友ID列表来查询用户数据库。此策略实际上会减少查询次数。根据检索结果,您可以获取朋友(以前找到的)信息。还有一件事要记住,在执行操作后调用响应成功。希望这有帮助。
问候。