I am beginning journey on JS and NodeJS. While writing a hello-world app encountered different behavior of setTimeout. It would be great if I could know the cause of this difference.
Scenario 1: response waits for 5 sec
Scenario 2: Request get resolved immediately though timeout is set for 5 second
Code difference in two scenario is; in Scenario-1 setTimeout has anonymous function and in scenario-2 it calls another function in the same module.
calculator.js
Scenario-1:
module.exports.addNumbers = function(numberArray){
return new Promise(function(fullfil, reject){
setTimeout(() => {
if(!(typeof numberArray === 'Array'))
reject('Not number elements found!');
},5000);
//fullfil(10000);
});
}
Scenario-2:
module.exports.addNumbers = function(numberArray){
return new Promise(function(fullfil, reject){
setTimeout(add(numberArray, fullfil, reject),5000);
//fullfil(10000);
});
}
function add(numberArray, fullfil, reject){
if(!(typeof numberArray === 'Array'))
reject('Not number elements found!');
}
Router (Same in both scenario):
var express = require('express');
var router = express.Router();
var calculator = require('../services/calculator');
router.get('/',function(req,res,next){
//res.writeHeader(200,{'content-type':'text/plain'});
res.send('Hello World - ' + JSON.stringify(res));
console.log(res);
});
router.get('/testpromise',function(req,res,next){
calculator.addNumbers('First Try')
.then(function(result){
res.send(' Final Result ## '+result);
})
.catch(function(err){
res.send(' ERROR MSG ## '+err);
console.error(' ERROR MSG ##' +err);
});
});
module.exports = router;