Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Understanding Javascript Scope Trouble

I have the following code in my Node.js project:

var response;

if (theInput == 1) {
    models.User.find({
        usersNumber: usersNumber,
        active: true
    }, function (err, user_data) {
        response = "Number is 1";
    });
} else if (theInput == 2) {
    response = "Number is 2";
} else {
    response = "Number is n/a";
}
return response;

I am having a hard time setting response when theInput = 1. Response is undefined when it gets returned. I don't want to set it outside of the model.find function, because my actual response text (in my real code) is based on some of that data.

like image 809
Andrew Garcia Avatar asked May 16 '26 10:05

Andrew Garcia


1 Answers

response is undefined because it is set asynchronously. Because the processing of inputs is asynchronous (based on callbacks instead of returns). Your function must take a callback rather than return a value. It's also normal practice in node to use the first parameter of a callback for errors, and the second for a return value:

function giveResponseForInput(theInput, callback) {
  if (theInput == 1) {
    models.User.find({
      usersNumber: usersNumber,
      active: true
    }, function(err, user_data) {
      if (err) {
        callback(err)
      } else {
        callback(null, "Number is 1");
    });
  } else if (theInput == 2) {
    callback(null, "Number is 2");
  } else {
    callback (null, "Number is n/a");
  }
}

var returnValue = giveResponseForInput(1, function(err, value) {
     console.log("callback value should be \"Number is 1\" unless the database had an error:", err ? err, value);
});

console.log("return value should be undefined", returnValue);
like image 184
lyjackal Avatar answered May 17 '26 22:05

lyjackal



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!