0

Games Structure:

    objectId - String
    name - String
    genres - Array
    
Games Data:
    ObjectId      name    genres
    =====================================
    gawtttBGc2    AAA     ["a", "d"]
    gawtttBGc9    BBB     ["b", "p"]
    gawtutrGc4    CCC     ["a", "b", "d"]
    gawttuowc7    EEE     ["d"]
    
Cloud Code:
        var gQuery = new Parse.Query(Games);
        var foundGame;
        var relatedGames;
        gQuery.equalTo('name', req.params.name).first({
            success: function(game) {
                foundGame = game;
            },
            error: function(error) {
                return [];
            }
        }).then(function() {
            res.render('games/show', {
                game: foundGame,
                relatedGames: relatedGames
            });
        },
        function() {
            res.send(500, 'Failed finding');
        });
    
How do I go about getting the related games based on genres to store in relatedGames variable?

ex:

    if req.params.name = AAA then
        relatedGames = CCC, EEE
    if req.params.name = BBB then
        relatedGames = CCC
    if req.params.name = CCC then
        relatedGames = AAA, BBB
    
I've tried using "containedIn" in "success" function of equalTo as seen below but it didn't work.
        var gQuery = new Parse.Query(Games);
        var foundGame;
        var relatedGames;
        gQuery.equalTo('name', req.params.name).first({
            success: function(game) {
                foundGame = game;
                var newQuery = new Parse.Query(Games);
                newQuery.containedIn('genres', foundGame.get('genres')).find({
                    success: function(results){
                        relatedGames = results;
                    },
                    error: function(error){
                        console.log(error);
                    }
                });
            },
            error: function(error) {
                return [];
            }
        }).then(function() {
            res.render('games/show', {
                game: foundGame,
                relatedGames: relatedGames
            });
        },
        function() {
            res.send(500, 'Failed finding');
        });
    

1 Answer 1

0

Played around "Promise" and was able to get it to work.

        var gQuery = new Parse.Query(Games);
        var foundGame;
        var relatedGames;
        gQuery.equalTo('nameShort', req.params.name).find().then(function(games) {
            foundGame = games[0];
            var promise = Parse.Promise.as();
            promise = promise.then(function(){
                return gQuery.containedIn('genres', foundGame.get('genres')).find().then(function(results) {
                    relatedGames = results;
                    return Parse.Promise.as('Find Related Games');
                });
            });
            return promise;
        }).then(function() {
            res.render('games/show', {
                game: foundGame,
                relatedGames: relatedGames
            });
        },
        function() {
            res.send(500, 'Failed finding');
        });
    

Still trying to understand more how "Promise" works exactly but hope this helps someone else.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.