我是节点和承诺的新手。我有两个文件 - 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;
})
}
}
答案 0 :(得分:1)
getSubscriptions
没有返回语句
并且考虑到其中存在一些异步内容,您应该将所有内容包装在一个promise中,并且只有在它结算后才触发后续逻辑。
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);
})
});