将对象从SQL查询函数传递给一个单独的函数
我是新来的节点和承诺。 我有两个文件 – server.js
和db.js
server.js
db.js
作为模块导入。
我从db.js
模块中的SQL数据库中获取一些数据,并试图将这些数据传递给server.js
的函数。 我已经成功从数据库中提取数据,但是当我尝试将它传递给server.js
的函数时,它只返回一个undefined
值。
这是代码
server.js
const db = require('./db.js'); app.post('/api/trigger-push-msg/', function (req, res) { return getSubscriptionsFromDatabase() .then(function(subscriptions) { // Do something }); }); function getSubscriptionsFromDatabase() { return new Promise((resolve, reject) => { let subscriptions = db.getSubscriptions(); console.log(subscriptions); // this only prints "undefined" if (subscriptions != undefined) { resolve(subscriptions); } else { reject("No"); // this executes } }) }
db.js
module.exports = { getSubscriptions: function() { var sql = "SELECT * FROM subscriptions"; con.query(sql, function(err, result) { if (err) throw err; console.log(result); // this prints the same result as I want return result; }) } }
getSubscriptions
没有返回语句
并且考虑到其中有一些asynchronous内容,你应该把所有的内容都包含在一个promise中,并且只有在parsing后才触发后续的逻辑。
module.exports = { getSubscriptions: function() { var sql = "SELECT * FROM subscriptions"; return new Promise(function(resolve, reject){ con.query(sql, function(err, result) { if (err) return reject(err); resolve(result); }) }) } }
然后:
function getSubscriptionsFromDatabase() { return db.getSubscriptions() .then(function(subscriptions){ return subscriptions; }) }
并在你的路线:
app.post('/api/trigger-push-msg/', function (req, res) { getSubscriptionsFromDatabase() .then(function(subscriptions) { res.send(subscriptions); }) .catch(function(err){ res.sendStatus(500); }) });