Узел Js перезвонить / обещать / вернуть - PullRequest
0 голосов
/ 23 февраля 2019

Я новичок в этом узле js и прошел через множество объяснений, перепробовал много решений, но все еще не могу обернуть голову вокруг обратных вызовов функций.

//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;

<- Результат -> Rb-v2 запущен !!!мы находимся здесь, на панели инструментов: {id: '23'} TypeError: dashboardfunc.productlist не является функцией

Вопрос в том, почему так сложно получить результаты, и почему это так сложно вызватьфункция, получить возвращаемые данные.Наряду с этим, какова сделка с callback v / s обещанием (да, я прочитал почти все сообщения в нем, все еще мой наивный мозг не может обработать это)

1 Ответ

0 голосов
/ 23 февраля 2019

Для начала попробуйте эти небольшие исправления:

  1. admindashboard.js экспортирует единственную функцию, но app.js пытается использовать ее как свойство объекта.Вам нужен либо этот тип экспорта:
module.exports = { productlist };

, либо это с использованием:

dashboardfunc().then

Аргумент в импортированном вызове функции отсутствует.Попробуйте dashboardfunc(data).then вместо упомянутого dashboardfunc.productlist().then.

resolve обратный вызов не используется в функции productlist().Используйте его для возврата данных из обещания: resolve(results); вместо return results;.

Будьте последовательны в обработке ошибок.Используйте:

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

вместо:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...