Search code examples
node.jscallbackreturn

Node Js call back / promise/ return


I am kind of new to this node js and went through many explanations, tried many solutions but still cant get my head wrapped around the function call backs.

//app.js file
var dashboardfunc = require('./models/admindashboard');

app.get("/dashboard/:id?", function(req, res) {
	console.log("we are here in dashboard")
	var data = {id: req.params.id};
	console.log(data)

	dashboardfunc.productlist().then(function(results){
		console.log("i am here now ....")
		console.log(results)
	}).catch(function(err){
		if(err){
			console.log(err)
		}
	})
		
});


//admindashboard.js file
//I tried many other alterations like using call back etc. 
// i want the damn results to be back to the app.js and use that 
//
function productlist(data) {
    return new Promise(function(resolve, reject) {
        var param = [data.id];
        var sql = 'select * from product where seller_id=?';
        console.log(param)
        pool.query(sql, param, function(err, results) {
            if (err) {
                console.log(err)
            }
            else {
                if (results === undefined) {
                    reject(new Error("Error rows is undefined"));
                }
                else {
                    console.log("we got here in productlist")
                    
                    console.log(results)
            
                    return results;                    
                }
            }
        })
    })
}


module.exports = productlist;

<--Result --> Rb-v2 started !!! we are here in dashboard { id: '23' } TypeError: dashboardfunc.productlist is not a function

Question is why it is so hard to get the results back , and why it needs to be so complicated to call a function , get the return data. Along with that whats the deal with callback v/s promise ( yeah I read almost all post in it still my naive brain cant process it)


Solution

  • Try these small fixes for the start:

    1. admindashboard.js exports the only function, but app.js tries to use it as a property of an object. You need either this type of export:
    module.exports = { productlist };
    

    or this using:

    dashboardfunc().then
    
    1. The argument in the imported function call is missing. Try dashboardfunc(data).then instead of mentioned dashboardfunc.productlist().then.

    2. resolve callback is not used in productlist() function. Use it to return the data from the promise: resolve(results); instead of return results;.

    3. Be consistent in error handling. Use:

               if (err) {
                    reject(err)
                }
                else {
                    if (results === undefined) {
                        reject(new Error("Error rows is undefined"));
                    }
    
    

    instead of:

               if (err) {
                    console.log(err)
                }
                else {
                    if (results === undefined) {
                        reject(new Error("Error rows is undefined"));
                    }