0

I use nodejs and mysql for my app. I do the DB query in such manner:

try {
    myDB.query(SQL, object, (err, res) => {
        if (err) throw err
        ...
    }
} catch (err) {
    console.log(err.message)
}

But this is do not work because of async query func. So how to catch those errors, which is can occur in callback? Please help.

0

2 Answers 2

3

You can't throw inside of async code with callbacks. You must use async error handling:

function makeQuery(callback) {
  myDB.query(SQL, object, (err, res) => {
    if (err) {
      callback(err)

      return
    }

    ...
  }
}

It's up to the caller to provide a suitable callback function that takes (err, response) or something similar. It's also the responsibility of the caller to intercept, handle, or forward any and all errors.

If you use Promise-driven code you can either use .catch() or async functions with await that will work inside try. Sequelize is a good Promise-driven database driver.

Then you have code that looks like this:

let result = await myDB.query(SQL, object)

Which is obviously a lot cleaner.

Sign up to request clarification or add additional context in comments.

Comments

0

You could use this example:

try {
  connection.query('SELECT * FROM ??',[Table], function (err) {
    if (err) console.error('err from callback: ' + err.stack);
  });
} catch (e) {
  console.error('err thrown: ' + err.stack);
}

for example. if "Table" does not exist, you would have the response:

'Table' doesn't exist

EDIT:

what @tadman says is correct, if you use if (err) throw err, you are only generating an exception error and you lose what you need.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.