2015-05-21 75 views
1

我有一個名爲friends的表 useridfriendid解析for循環中的雲代碼查詢

我想查詢數據庫以查找用戶的朋友。通過使用下面的代碼這是工作的罰款:

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循環第2個查詢,查詢用戶數據庫...

回答

0

您不必查詢您找到的每個朋友ID(效率低下)。相反,在獲取好友ID列表後,可以通過發送帶有query.containedIn約束的好友ID列表來查詢用戶數據庫。該策略實際上會減少查詢次數。根據檢索結果,您可以獲得朋友(以前找到的)信息。還有一件事要記住,執行操作後調用響應成功。希望這有助於。

問候。

1

使用承諾,你可以把它分成幾個獨立的部分。承諾真的很棒,使用起來也非常容易,也很容易創建你自己的承諾。

我會做的拆分這件事成找到朋友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獲取用戶並返回用戶對象。

另外,使用承諾。他們更容易合作,可以拆分成不同的工作單位。

當然,我不知道這裏的語法是否正確以及正確的名字應該是什麼,甚至是你的對象模型的樣子,但希望這可以作爲指導。

+0

嗨Fogmeister,thx爲您的答覆。不幸的是你上面的代碼只返回[],我不知道從哪裏開始,因爲調試雲代碼幾乎是不可能的。 – markus

+0

您可以使用console.log()進行調試,並且它將在線打印它。你在錯誤日誌中看到任何錯誤嗎?另外,你確定我寫的代碼對你的對象模型有效嗎? – Fogmeister

+0

我已經嘗試console.log()與以下輸出:I2015-05-22T10:29:00.994Z] v58 Ran雲功能searchfriend用戶Ln9sP86iWk與: 輸入:{「myid」:「Ln9sP86iWk」} 結果:[] I2015-05-22T10:29:01.021Z] {「_ resolved」:false,「_ rejected」:false,「_ resolvedCallbacks」:[],「_ rejectedCallbacks」:[]} I2015-05- 22T10:29:01.073Z] {「_ resolved」:false,「_ rejected」:false,「_ resolvedCallbacks」:[],「_ rejectedCallbacks」:[]} – markus