Mr T
Mr T

Reputation: 1000

Parse.com query.equalTo error processing

I'm trying to query a Parse.com database to see if a certain field is available. I am then looking to do certain actions depending on whether or not the variable is present in the database.

Here is the full production function:

function getProduct() {

        var Products = Parse.Object.extend("Products");
        ProductEAN = 76130347394081;
        output = "";

        var query = new Parse.Query(Products);
        query.equalTo("EANBarcode", ProductEAN );
        query.find({
            success: function(results) {
                var no = results[0].get("EANBarcode");
                var title = results[0].get("Name");
                output += "[" + no + "] " + title;
                console.log( "Output is: " + output );
            },

            error: function(error) {
                alert(error.message);
            }

        });
    }

If the ProductEAN is present, then the success function works as intended. If it is not present, rather than the error function running, I get a console output saying the following:

"Uncaught TypeError: Cannot read property 'get' of undefined"

I am following this guide: https://www.youtube.com/watch?v=2TVmgEJfbno

I am at a bit of a loss as to why this would not work. Does anyone have any experience with this?

Upvotes: 0

Views: 45

Answers (1)

curiousgeek
curiousgeek

Reputation: 846

Error callback of find() method gets called only when there's an error in execution. In the case when ProductEAN is not present, it is still a successful query but with zero matching records. Which means it calls your success callback with results being an empty array. Hence results[0] is undefined , which explains the console error output.

You might want to change your success callback to verify for the results.length and make decision appropriately. Something like this :

query.find({
            success: function(results) {
               if(results.length > 0){
                var no = results[0].get("EANBarcode");
                var title = results[0].get("Name");
                output += "[" + no + "] " + title;
                console.log( "Output is: " + output );
              }
              else{
                 console.log('No matching records');
              }
            },

            error: function(error) {
                alert(error.message);
            }

        }); 

Upvotes: 2

Related Questions