我正在构建一个带有 postgres 后端的 Nodejs 应用程序。我使用连接池,当我像这样调用我的数据库时,我希望返回最后插入的 ID。这工作正常,但是调用该函数的代码返回了未定义的值。这里可能出现什么问题?
function LogSmsToDb(messageToLog) {
const text = 'INSERT INTO sms(Sender, Message, CreateDate) VALUES($1, $2, $3) RETURNING smsid'
var datenow = new Date();
const values = [messageToLog.from, messageToLog.message, datenow]
pool.query(text, values, (err, res) => {
if (err) {
logger.error('Error saving to db: ' + err);
console.log('Error saving to db: ' + err);
return 0;
}
else{
console.log('id' + res.rows[0].smsid) //This gives me the value to console.
return res.rows[0].smsid;
}
})
}
调用代码:
routes.post('/newsms', function (req, res) {
let sms = req.body;
var smsId = LogSmsToDb(sms); //Value here is undefined.
}
据我所知,控制台输出似乎以错误的顺序出现,因此我对 console.log 的第一次调用显示在最后。
返回的id:未定义 [未定义,'1',1,2018-02-12T09:51:09.492Z] id27
有什么想法吗?
最佳答案
使用 Promise 来解决这个问题
function LogSmsToDb(messageToLog) {
const text = 'INSERT INTO sms(Sender, Message, CreateDate) VALUES($1, $2, $3) RETURNING smsid'
var datenow = new Date();
const values = [messageToLog.from, messageToLog.message, datenow]
return new Promise(function (resolve, reject){
pool.query(text, values, (err, res) => {
if (err) {
logger.error('Error saving to db: ' + err);
console.log('Error saving to db: ' + err);
reject(0)
//return 0;
}
else{
console.log('id' + res.rows[0].smsid) //This gives me the value to console.
resolve(res.rows[0].smsid;)
// return res.rows[0].smsid;
}
})
})
调用代码
routes.post('/newsms', function (req, res) {
let sms = req.body;
LogSmsToDb(sms).then((smsId)=>{
console.log(smsId)//Value here is defined as u expect.
});
}
关于javascript - 当我可以在控制台中看到该值时,为什么我的nodejs postgres函数返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48743658/