Я борюсь с асинхронным ожиданием, попробуйте перехватить блоки в течение нескольких дней.
async function executeJob(job) {
// necessary variable declaration code here
try {
do {
let procedureRequests = await ProcedureRequestModel.find(filter, options);
// doing process here...
} while (fetchedCount < totalCount);
providerNPIIds = [...providerNPIIds];
// Fetch provider details
let providerDetails = await esHelper.getProvidersById(providerNPIIds, true);
try {
let updateProviderCount = await UserProvider.updateAll(
{
userId: userId
},
{
providers: providerNPIIds,
countByType: providerCountType
});
if(updateProviderCount) {
try {
let destroyJobId = await app.models.Job.destroyById(job.idd);
} catch (e) {
var err = new QueueError();
console.log(err instanceof QueueError);
throw new QueueError();
}
}
} catch (e) {
logger.error('Failed to update UserProviders & Count: %O', err);
throw e;
}
executeNextJob();
} catch (e) {
if(e instanceof QueueError) {
console.log('Exiting from process');
process.exit(1);
} else {
console.log('Working Code');
buryFailedJobAndExecuteNext(job);
}
}
}
Является ли моя попытка уловить эту асинхронную функцию?
Так я создал пользовательский класс ошибок и экспортировал его глобально.
// error.js file
class QueueError extends Error {
}
global.QueueError = QueueError;
Требование:
Преднамеренно изменил job.id на job.idd в
let destroyJobId = await app.models.Job.destroyById(job.idd);
чтобы я мог отловить ошибку.
Если есть ошибка, тогда бросьте недавно созданный пользовательский класс Error Но бросание QueueError приведет к регистрации
logger.error('Failed to update UserProviders & Count: %O', err);
тоже, хотя нет необходимости отлавливать там ошибки, так как блок try работает
Если я выбрасываю QueueError, я хочу только перехватить ошибку только в последнем блоке перехвата.
Ниже приведена версия обратного вызова, я конвертирую ее в асинхронное ожидание.
Updating providersNPIId & category count
UserProvider.updateAll({userId: userId},
{
providers: providerNPIIds,
countByType: providerCountType,
}, function(err, data) {
if (err) {
logger.error('Failed to update UserProviders & Count: %O', err);
// throw new QueueError();
}
// Remove countProvider Job
app.models.Job.destroyById(job.id, function(err) {
if (err) {
logger.error('Failed to remove countProvider job: %O', err);
}
});
});