使用解析和JavaScript查找朋友 [英] Using parse and javascript to find friends
问题描述
在我的程序中,如果人们跟随您,您就是朋友.我想和我的朋友们在一起.我使用以下功能,它可以设置正确的用户数,但是它们都被命名为同一事物.有什么想法吗?
function getMyFriends() {
var relation = Parse.User.current().relation("peopleIFollow");
relation.query().find({
success: function(results) {
// results is an array of Parse.Object
var myFriendsArrayTemp=[];
while(document.getElementById("datalist").hasChildNodes() ) {
document.getElementById("datalist").removeChild(document.getElementById("datalist").lastChild);
}
for (i = 0; i < results.length; i++) {
var user=results[i]
// console.log(user.getUsername())
var relation2 = user.relation("peopleIFollow");
// console.log(relation2)
relation2.query().find({
success: function(theirfriends) {
// results is an array of Parse.Object
for (z = 0; z < theirfriends.length; z++) {
var personTheyFollow=theirfriends[z];
if ( personTheyFollow.getUsername() == Parse.User.current().getUsername() ) {
myFriendsArrayTemp.push(user.getUsername())
console.log(user.getUsername())
var datalist=document.getElementById("datalist")
var option=document.createElement('option')
option.value=user.get("name");
datalist.appendChild(option)
}
}
}, error: function(error) {
// error is an instance of Parse.Error.
refreshTimedOut();
}
});
}
console.log("****")
console.log(myFriendsArrayTemp);
console.log("****")
}, error: function(error) {
// error is an instance of Parse.Error.
refreshTimedOut();
}
});
}
您的问题是relation2.query().find()
是一个异步函数,因此success
回调无法访问需要其关系的用户.>
为避免这种情况,您可以使用立即调用的函数表达式将用户显式传递给成功回调.
此答案很好地解释了这个问题
我无法对其进行测试,但以下内容应该可以为您工作:
function getMyFriends() {
// query all the people I follow
var relation = Parse.User.current().relation("peopleIFollow");
relation.query().find({
success: function(results) {
//create an array to hold all confirmed friends
var myFriendsArrayTemp=[];
//clear some on page display
while(document.getElementById("datalist").hasChildNodes() ){
document.getElementById("datalist").removeChild(document.getElementById("datalist").lastChild);
}
// loop through each of the people I follow
for (i = 0; i < results.length; i++){
var followedUser=results[i] //use a more unique var for this than `user`
var relation2 = followedUser.relation("peopleIFollow");
//get all the people this user follows
relation2.query().find({
success: (function(followedUser) { // IIFE
return function(results) {
//loop through the people they follow to see if in in that list
for (z = 0; z < theirfriends.length; z++) {
var personTheyFollow=theirfriends[z];
if ( personTheyFollow.getUsername() == Parse.User.current().getUsername() ) {
// im in their list, friendship confirmed set some stuff
myFriendsArrayTemp.push(followedUser.getUsername())
console.log(followedUser.getUsername())
var datalist=document.getElementById("datalist")
var option=document.createElement('option')
option.value=user.get("name");
datalist.appendChild(option)
}
}
}
})(followedUser),
error: function(error) {
// error is an instance of Parse.Error.
refreshTimedOut();
}
});
}
console.log("****")
console.log(myFriendsArrayTemp);
console.log("****")
}, error: function(error) {
// error is an instance of Parse.Error.
refreshTimedOut();
}
});
}
In my program, if people follow you back you are friends. I'm trying to get my friends. I use the following function, and it sets up the correct number of users but they're all named the same thing. Any ideas?
function getMyFriends() {
var relation = Parse.User.current().relation("peopleIFollow");
relation.query().find({
success: function(results) {
// results is an array of Parse.Object
var myFriendsArrayTemp=[];
while(document.getElementById("datalist").hasChildNodes() ) {
document.getElementById("datalist").removeChild(document.getElementById("datalist").lastChild);
}
for (i = 0; i < results.length; i++) {
var user=results[i]
// console.log(user.getUsername())
var relation2 = user.relation("peopleIFollow");
// console.log(relation2)
relation2.query().find({
success: function(theirfriends) {
// results is an array of Parse.Object
for (z = 0; z < theirfriends.length; z++) {
var personTheyFollow=theirfriends[z];
if ( personTheyFollow.getUsername() == Parse.User.current().getUsername() ) {
myFriendsArrayTemp.push(user.getUsername())
console.log(user.getUsername())
var datalist=document.getElementById("datalist")
var option=document.createElement('option')
option.value=user.get("name");
datalist.appendChild(option)
}
}
}, error: function(error) {
// error is an instance of Parse.Error.
refreshTimedOut();
}
});
}
console.log("****")
console.log(myFriendsArrayTemp);
console.log("****")
}, error: function(error) {
// error is an instance of Parse.Error.
refreshTimedOut();
}
});
}
Your problem is that relation2.query().find()
is an asynchronous function as such the success
callback does not have access to the user whose relations are being quired.
To avoid this you can use an immediately invoked function expression to explicitly pass the user to the success callback.
This answer does a great job of explaining the issue
I cant test it, but the below should work for you:
function getMyFriends() {
// query all the people I follow
var relation = Parse.User.current().relation("peopleIFollow");
relation.query().find({
success: function(results) {
//create an array to hold all confirmed friends
var myFriendsArrayTemp=[];
//clear some on page display
while(document.getElementById("datalist").hasChildNodes() ){
document.getElementById("datalist").removeChild(document.getElementById("datalist").lastChild);
}
// loop through each of the people I follow
for (i = 0; i < results.length; i++){
var followedUser=results[i] //use a more unique var for this than `user`
var relation2 = followedUser.relation("peopleIFollow");
//get all the people this user follows
relation2.query().find({
success: (function(followedUser) { // IIFE
return function(results) {
//loop through the people they follow to see if in in that list
for (z = 0; z < theirfriends.length; z++) {
var personTheyFollow=theirfriends[z];
if ( personTheyFollow.getUsername() == Parse.User.current().getUsername() ) {
// im in their list, friendship confirmed set some stuff
myFriendsArrayTemp.push(followedUser.getUsername())
console.log(followedUser.getUsername())
var datalist=document.getElementById("datalist")
var option=document.createElement('option')
option.value=user.get("name");
datalist.appendChild(option)
}
}
}
})(followedUser),
error: function(error) {
// error is an instance of Parse.Error.
refreshTimedOut();
}
});
}
console.log("****")
console.log(myFriendsArrayTemp);
console.log("****")
}, error: function(error) {
// error is an instance of Parse.Error.
refreshTimedOut();
}
});
}
这篇关于使用解析和JavaScript查找朋友的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!