В одном файле с именем SearchBuilder. js У меня есть эта функция (написанная таким образом как чистый тест)
self.validateInputs = async params => {
const validateDates = async () => {
const pick_up_date = moment(`${params.pick_up_date} ${params.pick_up_time}`),
drop_off_date = moment(`${params.drop_off_date} ${params.drop_off_date}`);
return true;
};
const validatePickUpId = async () => {
return true;
};
const validateDropOffId = async () => {
throw { 'code': 'NOT_FOUND'};
};
return Promise.all([
validateDates,
validatePickUpId,
validateDropOffId,
]);
};
В другом файле с именем searchEngine. js У меня есть это:
self.run = async (type, search_inputs, account) => {
const searchBuilder = self.getSearchBuilder(type);
try {
const isValid = await searchBuilder.validateInputs(search_inputs);
console.log(isValid);
} catch (e) {
console.log('error input validation');
}
return search;
};
Я ошибочно думал, что если какое-либо из обещаний в Promise.all не выполнится, мой код попадет в блок catch. Вместо этого, даже если обещание не выполняется, код внутри улова никогда не выполняется, а внутри isValid я получаю это.
[ [AsyncFunction: validateDates],
[AsyncFunction: validatePickUpId],
[AsyncFunction: validateDropOffId] ]