На самом деле то, что вы делаете - это нормально, если вы хотите отлавливать ошибки, регистрируйте предупреждение и затем продолжаете в любом случае.
Это асинхронный / ожидающий эквивалент:
let customerId;
try {
try {
await initFirestore()
console.log('Firestore has been initialized.');
} catch(err) {
throw new Error(err);
});
try {
customerId = await seedServices());
} catch(err) {
console.log('Trouble seeding firestore with seedTemplates', err);
};
const response = await myNewFunction();
console.log(response);
await seedFirestore();
console.log('Seed created for Customer: ', customerId);
} catch (err) {
console.log('Seed created with warnings for Customer: ', customerId);
}
Что странно здесь:
- Немедленно повторно выдает полученную ошибку, завернутую в
new Error()
. - Использование исключений для предупреждений
И, возможно, вы можете немного очистить свой код, подняв тогда переменную customerId
за пределы первой, так что вам не придется ее везде передавать.
Редактировать есть проблемы с вашим кодом, не каждый путь правильно перенаправляет customerId в следующий обработчик then (). Если вы хотите использовать then () / catch () вместо async / await.
У меня возникнет один вопрос: действительно ли вы хотите продолжить работу даже после сбоя seedServices. Я предполагаю «нет», поэтому я переписал бы ваш код в:
let customerId;
initFirestore()
.then(() => {
console.log('Firestore has been initialized.');
return seedServices();
})
.then(cId => {
customerId = cId;
return myNewFunction();
})
.then(() => seedFireStore());
.then(() => {
console.log('Seed created for Customer: ', customerId);
})
.catch(customerId => {
console.log('Error while creating seed for customer ', customerId);
});
асинхронный / ожидающий эквивалент:
let customerId;
try {
await initFirestore()
const customerId = await seedServices();
await myNewFunction();
await seedFireStore());
console.log('Seed created for Customer: ', customerId);
} catch(err) {
console.log('Error while creating seed for customer ', customerId);
});
Если вы сделали хочу отлавливать ошибки и продолжать в любом случае (после seedServices), я бы порекомендовал разделить ваши операции на несколько разных функций. Это всегда лучше, чем вложение ваших цепочек обещаний.