Проблема в том, что вы смешиваете .then/.catch
с try/catch
.
Если вы хотите, чтобы код вводил try/catch
в функции async
, вы должны использовать ключевое слово await
в Promise
.
Вы можете сбросить .catch
, поскольку он ничего не делает, вы снова выдаете ошибку, и это вызывает UnhandledPromiseRejectionWarning
const myFunction = () => (req, res, next) => {
try {
const response = await myHTTPRequest();
if (response.data.results.length != 1) {
throw new MyException('MyError');
}
res.end('All good');
} catch (error) {
next(error);
}
};
Используя .then/catch
без async/await
код будет:
const myFunction = () => (req, res, next) => {
myHTTPRequest().then((response) => {
if (response.data.results.length != 1) {
throw new MyException('MyError');
}
res.end('All good');
})
.catch((error) => {
throw error;
// It makes no sense to throw again in here
// But I'm showing you how to handle it if you do
})
.catch(error => {
next(error);
})
};
Конечно, двойной .catch
не имеет смысла, и вы должны удалить его, оставив один:
const myFunction = () => (req, res, next) => {
myHTTPRequest().then((response) => {
if (response.data.results.length != 1) {
throw new MyException('MyError');
}
res.end('All good');
})
.catch(error => {
next(error);
})
};