I'm having alot of trouble getting couchdb's response handlers to do anything useful with node.js and now.js. My aim is to call back to a client or group with certain information that's been found and also sent from a client.
everyone.now.login = function(){
var username = this.now.lusername;
var password = this.now.lpassword;
var test;
db.get(this.now.lusername, function (err, doc, test, username) {
if (err) {
console.log(+ username + " doesn't exist!");
} else {
console.log('Found user!');
console.log(doc);
test = 1;
}
});
console.log(test);
}
I'm using test as an example here. I declare it outside db.get, assign a value inside to feed back but when console.log is run outside it doesn't have a value.
Am I simply not getting it or is something wrong?
(I do release I can use doc.(whatever value) but there is a particular variable i wanted to pass on back to the client outside of this call)
The test
variable will not have a value in the console.log
because the CouchDB response has not arrived yet. Your login function executes the following steps.
username
, password
, and test
is undefined)this.now.lusername
) with a function assigned to run when it is completeconsole.log(test)
which is still undefinedWhat I do for things like this is use function calls.
everyone.now.login = function(){
var username = this.now.lusername;
var password = this.now.lpassword;
db.get(this.now.lusername, function (err, doc, test, username) {
if (err) {
console.log(+ username + " doesn't exist!");
} else {
console.log('Found user!');
console.log(doc);
login_complete(doc);
}
});
function login_complete(doc) {
console.log('The login finished! Doc is ' + doc)
}
}
This way the code still looks correct (the "story" of the code mostly flows from top to bottom), but it also executes correctly (the login_complete()
function runs only after the login is actually complete).