Я думаю, вам не нужно использовать какую-либо из библиотек для написания читаемого, синхронно выглядящего асинхронного кода.
Я использовал async-await без блоков try / catch, следующим образом -
//write a promise
function getUserFromDb(userId){
return new Promise((resolve,reject)=>{
if(userId == undefined){
return reject('no userId specified');//return to stop proceeding further.
}
UserModel.findById(userId,function(err,user){
if(err) return reject('error while fetching user details.')
resolve(user);
});
}
//-------------------
//usage
//remember to use async keyword before function declaration
//...
let user = await getUserFromDb(userId).catch(err=>console.log(err));
//user will be undefined, if the promise was rejected.
if(!user){
console.log('error while getting the details');
}
//...
или, если вы хотите использовать ошибки конкретно,
//usage
let user,userErr;
user = await getUserFromDb(userId).catch(err=>userErr = err);
if(!user){
console.log(userErr);
}
с одной дополнительной строкой вы можете избежать использования внешней библиотеки и оборачивать ваш код ненужной функцией.
Но если вам нужно использовать один из ваших фрагментов, то первый намного лучше, поскольку блоки try / catch замедляют работу.