gpt4 book ai didi

javascript - 当我可以在控制台中看到该值时,为什么我的nodejs postgres函数返回未定义?

转载 作者:行者123 更新时间:2023-12-03 02:30:53 25 4
gpt4 key购买 nike

我正在构建一个带有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com