У меня есть .then в возвращении обещания, и в этом я определил асинхронную функцию, которая получает некоторые данные из API.Часть, в которой я застрял, заключается в том, что когда я выкидываю ошибку (принудительно), она не перехватывается блоком catch.
Из того, что я узнал, достаточно одного .catch для всех операторов .then.Это потому, что внутри кода есть другая асинхронная функция и, следовательно, .catch не работает?
CampaignController.getOnboardingCampaignList = (req,res) => {
return OnBoardingCampaign.find({description : {$exists : true}},{name: 1, description : 1, suggestedHaikuIds : 1})
.then((r) => {
// Some Logic here, unrelated the the work done below
async function getSuggestedHaiku(){
for(const campaign of r ){
let suggestedHaikuIds = [];
campaign.suggestedHaikus = [];
throw new Error; // Using this to throw the new error
if(campaign.suggestedHaikuIds === '') campaign.suggestedHaikuIds = [];
else{
campaign.suggestedHaikuIds.forEach((id) => {
suggestedHaikuIds.push(Helper.parseId(id))
}) // This particular line threw the error initially
const result = await SuggestedHaiku.find({_id: {$in : suggestedHaikuIds}},{timeStamp : 0, deleted : 0, returnCount : 0, writtenCount : 0});
campaign.suggestedHaikus = result;
}
}
if(r.length === 0){
return Promise.reject(1001);
}else{
let result = {};
result.list = r;
Helper.success(res,"Onboarding Campaign List",result);
}
}
getSuggestedHaiku();
})
.catch(err => Helper.error(res, err)) // This catch did not catch the error thrown above
}
Сообщения об ошибках:
UnhandledPromiseRejectionWarning: Ошибка в getSuggestedHaiku (/ Users / abhinav/haikuserver/controllers/campaign.js:242:23) в OnBoardingCampaign.find.then (/Users/abhinav/haikuserver/controllers/campaign.js:263:9) в process._tickCallback (внутренний / process / next_tick.js):68: 7) warning.js: 18 (узел: 7646) UnhandledPromiseRejectionWarning: необработанное отклонение обещания.Эта ошибка возникла либо из-за того, что внутри асинхронной функции не был выполнен блок catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch ().(id отклонения: 2) warning.js: 18 (узел: 7646) [DEP0018] DeprecationWarning: Необработанные отклонения обещания устарели.В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом выхода.