Написал небольшой пример, никак не могу додуматься, как заставить это работать и правильно ловить ошибки. Функцию helper3(next) нельзя менять. Подскажите как исправить.
function helper(error, results) {
return new Promise((resolve, reject) => {
if (error) reject(error);
if (results) resolve(results);
});
}
function helper3(next) {
next('err', 'eee');
}
function helper2() {
return new Promise((resolve, reject) => {
resolve(helper3(helper));
});
}
helper2().then(res => console.log('1', res)).catch(err => console.log('2', err));
Так как внутри helper2 Promise всегда успешно завершен, нет возможности попасть в catch.
Для исправления нужно, чтобы вызывались и resolve и reject параметры.
Так как они должны вызываться в соответствии с результатами helper, то и передавать их надо в продолжение helper. Для передачи, нужно вызвать then, но чтобы вызвать then, нужно вызвать саму функцию helper.
Для решение, нужно обернуть вызов в функцию:
helper3((err, succ) => helper(err, succ).then(resolve, reject))
Пример в сборе:
function helper(error, results) {
return new Promise((resolve, reject) => {
if (error) reject(error);
if (results) resolve(results);
});
}
function helper3(next) {
next('error', 'eee');
}
function helper2() {
return new Promise((resolve, reject) => {
helper3((err, succ) => helper(err, succ).then(resolve, reject));
});
}
helper2().then(res => console.log('1', res)).catch(err => console.log('2', err));
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости