gpt4 book ai didi

javascript - 在继续之前,我如何确保我的 postgres promise 得到解决?

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

我正在制作一个 Node-js 应用程序,它需要在继续另一个数据库调用之前从数据库查找一些信息,但我似乎无法确保在继续之前解决第一个检查。在继续之前,如何确保第一个查询始终得到满足?我尝试过嵌套 .next,但它们似乎还是在跳过。因此,在第一次数据库调用之后,我想检查返回的值,但它总是未定义。

我的异步函数:

async function GetStuff(text, id){
try {
return await db.query(text, id);
} catch(error) {
console.log('fel inne: ' + error)
logger.error('Fel: ' + error)
return null;
}
}

我的 Controller 代码,我在其中调用该方法,然后尝试使用 .next 等待调用。

router.post('/newStuff', async (req, res) => {

//Check if number exist in DB
const checkUserText = 'select * from public.User WHERE Mobilenumber = $1 limit 1';
const values = [req.body.from];

GetStuff(checkUserText, values)
.then(function(result) {
var user = result.rows[0];

//HERE I GET UNDEFINED for some reason. I need to check the result in order to select the next step.
if(user.userid !== null){
console.log(user)

//do some stuff...

} else {
res.end('Not OK')
}
}).catch(function(error) {
console.log('fel: ' + error)
logger.error('Fel: ' + error)
res.end('Error')
});
})

最佳答案

您应该抛出原始错误或新错误,而不是从 GetStuff 返回 null。如果数据库调用出现问题,这将导致 GetStuff.catch 被触发。

还有一个提示,您的 Controller 函数是异步的,因此您不需要在 Controller 代码中使用基于 Promise 的结构。您还可以使用异步/等待。

有了这两个,您最终会得到以下代码:

async function GetStuff(text, id){
try {
return await db.query(text, id);
} catch(error) {
console.log('fel inne: ' + error)
logger.error('Fel: ' + error)

throw new Error('Failed to get db record');
}
}

router.post('/newStuff', async (req, res) => {
//Check if number exist in DB
const checkUserText = 'select * from public.User WHERE Mobilenumber = $1 limit 1';
const values = [req.body.from];

let dbResult;
try {
dbResult = await GetStuff(checkUserText, values);
} catch (err) {
console.log('fel: ' + error)
logger.error('Fel: ' + error)
res.sendStatus(500);
}

const user = dbResult.rows[0];

if (user.userid !== null) {
console.log(user);
}

// Do some more things...

res.sendStatus(200); // All good!
}

关于javascript - 在继续之前,我如何确保我的 postgres promise 得到解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48977978/

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