如何确保我对Postgres的诺言在处理之前得到解决



im制作一个node-js应用程序,它需要从数据库中查找一些信息,然后再进行另一个db-call,但我似乎无法确保在之前解决了第一个检查程序。在继续之前,我如何确保始终进行第一个查询?我尝试了嵌套.next,但无论如何它们似乎都在跳过。因此,在第一个db all之后,我想检查返回的值,但它始终不确定。

我的异步函数:

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;
  }
}

我调用该方法的控制器代码,然后尝试使用.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如果数据库调用出现问题。

也只是一个提示,您的控制器功能是异步的,因此您无需在控制器代码中使用基于承诺的结构。您也可以使用异步/等待。

与这两者一起,您最终都会获得以下代码:

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!
}

最新更新