停止承诺链中的另一个.then()执行

时间:2019-04-18 10:38:03

标签: mysql node.js promise

我在nodejs和mysql中都有程序,如下所示

db.query()
   .then(1)
   .then(2)
   .then(3)
   .catch()

我正在检查then(1)中数据库的值,并尝试从那里返回响应。在then(2)中,我正在执行另一个代码,该代码使用来自then(1)结果的某些数据,因此上..

我的问题:从then(1)返回响应时,catch()正在调用(因为then(2)出错,无法从then(1)获取数据) 。因此,有什么方法可以停止在then(1)中进一步执行,以致then(2)catch()无法调用?

db.query('query......', [val1, val2])
.then(rslt => { return res.json({ mssg: "Email already exists!", error: "Email already exists!" }) }) 
.then(user => { return db.query('INSERT INTO ', value, (err, res, flds) => { err ? reject(err) : resolve(res) }) })
.then(user => { return res.json({ mssg: "Success", success: true}) })
.catch( (err) => { console.log(err) })

1 个答案:

答案 0 :(得分:2)

您可以(并且应该)使用异步功能,而不是使用Promise对象的较低级别的.then() API:

async function doTheThing() {
  try {
    const result = await db.query('...');
    if (result) { // user exists
      return res.json({...}); // this will end the entire function
    }
    const user = await db.query('...');
    return res.json({...}); // success
  } catch (err) {
    console.log(err); // I don't recommend doing this. try/catch should be for recovery
  }
}