NodeJs variable does not showing result when trying to call function

61 views
Skip to first unread message

Sushil Kumar Kishan

unread,
Jul 1, 2017, 8:06:46 PM7/1/17
to nodejs
Hi ,

I am trying to display database value in a variable but does not return any value.

below is the code.

var mssql = require('mssql');
var resultData='';
function getStyleData(){
var msSqlSettings = {
 server      : 'localhost',
 port        : '51663',
 user        : 'sa',
 password    : 'admin1234',
 database    : 'ComWriter.Temp002'
};
mssql.close();
mssql.connect(msSqlSettings, function (err ) { 
if (err) {
throw (err);
}
var getQuery = "SELECT [Title] FROM [dbo].[Templates] " ;
var request = new mssql.Request();
request.query(getQuery, function (err, rows) {
//console.log(rows);
mssql.close();
resultData = rows;
});
});
return resultData;
}
var getFunction = getStyleData()
console.log(getFunction);

Calogero Mandracchia

unread,
Jul 1, 2017, 10:53:06 PM7/1/17
to nodejs
Hi Kumar,
the operation "resultData = rows" is inside a callback, meaning it's in another thread. 
When "return resultData;" is read, it's still undefined, because it's being processed in the callback.
The simple answer woulb be to just put the "return" in the callback, the hard answer would be to understand how the main loop of nodejs works and how to use promises for handling callback.

ps: use const or let instead of var :)

Calogero

Alex Wells

unread,
Jul 3, 2017, 4:24:19 PM7/3/17
to nodejs
"meaning it's in another thread"

 I don't mean to pull you up on your helpful reply unnecessarily, but it's still in the same thread. Your NodeJS process is always in a single thread, and you should never think of it otherwise.

A good concept (I think) is thinking of the callback as being placed onto the execution stack of the current thread, but in the 'near future'. When OP returns 'resultData', the 'near future' has not happened yet.

Agree on using 'let' and 'const' for es6 concepts, definitely good if you can use it in your project, but ditto 'Promises' which would help you here I think - you'll still need to understand how anonymous function passing works though! Callbacks are key.

Thanks,
Alex

Calogero Mandracchia

unread,
Jul 4, 2017, 3:40:28 PM7/4/17
to nodejs
Hi Alex!

If you are writing software which isn't way too complex and you don't want to get crazy with all the secrets of Nodejs and JS then sure let's never think that nodejs is multithread, it will only confuse people and send them away to learn Python or whatever other "fast learning curve" programming language.

One day you'll need to do 5 big queries, each of them will need 1 minute. Unexpectedly It will take 2 minutes! Then you'll want to know the truth: Nodejs is multithreading and has a pool of 4 threads. 
Setting process.env.UV_THREADPOOL_SIZE =5 will do the trick. 
I'm not sure about it but usually there should be 6 threads: 1 for the main loop event, 1 for the libuv(mostly handling the async I/O) and 4 in the pool.

I don't know if new people learning JS should learn callbacks then promises and in the end async-await. They will sure know a lot more going through the callback hell but most of the times they just want to get things done ASAP. 

Calogero

Alex Wells

unread,
Jul 5, 2017, 2:41:59 PM7/5/17
to nodejs
the operation "resultData = rows" is inside a callback, meaning it's in another thread. 

a callback is not inside another thread. You seem to talk about a low-level NodeJS management operation where the environment itself can use other threads, but I don't see what that has to do with callbacks. Callbacks operate in the same thread, just lower down the call stack.
Reply all
Reply to author
Forward
0 new messages