Остановите другое выполнение .then () в цепочке обещаний - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть программа в 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 Ответ

2 голосов
/ 18 апреля 2019

Вы можете (и должны) использовать асинхронную функцию вместо низкоуровневого .then() API объекта Promise:

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
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...