.catch
принимает функцию в качестве параметра.Когда вы делаете
.catch(
console.log('exception handling')
);
, интерпретатор немедленно вызывает там console.log
в попытке вывести из него функцию, чтобы функцию можно было поместить в цепочку Promise
, так что он может быть вызван, если есть ошибка, которая должна быть перехвачена.Чтобы поведение было более ожидаемым, измените его на:
.catch(() => {
console.log('exception handling')
});
Но другая проблема заключается в том, что все ошибки будут в настоящее время "перехвачены" выше, в вашей ошибке .then
обработчик (вторая функция передана .then
):
const mongoClient = { connect: (_, __, fn) => {
setTimeout(() => {
fn('some error');
}, 500);
}};
var dbconnect = new Promise(function(resolve, reject){
mongoClient.connect('db', { useNewUrlParser: true }, (error, db) => {
if (error) {
console.log('Database connection failed')
reject(Error('Database Connection Failed'))
} else {
console.log('Database connected')
resolve(db)
}
})
});
dbconnect
.then(
db => {
console.log('db value :', db);
},
error => {
console.log('connection failed :', error)
}
)
.catch(
() => console.log('exception handling')
);
Лучше всего иметь только одно .catch
местоположение, например:
dbconnect
.then(
db => {
console.log('db value :', db);
}
)
.catch(
(err) => console.log('exception handling')
);