【问题标题】:Stop another .then() execution in chain of promises在承诺链中停止另一个 .then() 执行
【发布时间】:2019-09-08 16:30:21
【问题描述】:

我在 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) })

【问题讨论】:

  • 我可以看看您从 then(1) 到 then(2) 是如何返回响应的吗?
  • 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) })

标签: mysql node.js promise


【解决方案1】:

您可以(并且应该)使用异步函数,而不是使用 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
  }
}

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 2020-07-01
    • 2014-07-28
    • 2019-02-20
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多