Promise через callback

151
25 апреля 2019, 14:00

Написал небольшой пример, никак не могу додуматься, как заставить это работать и правильно ловить ошибки. Функцию 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));

Answer 1

Так как внутри 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));

READ ALSO
Как открывать и закрывать ссылку по таймеру?

Как открывать и закрывать ссылку по таймеру?

Подскажите как сделать так чтоб ссылка появлялась в определенное время и потом скрывалась тоесть будет проводится мероприятие в одно и то же время...

154
Заполнение imput поля JQ

Заполнение imput поля JQ

На сайте есть форма ввода inputЯ пытался заполнить её скриптом ниже:

166
Как присоединить 3 таблицу с помощью JOIN?

Как присоединить 3 таблицу с помощью JOIN?

Есть SQL JOIN запрос на 2 таблицы

143
Запрос MYSQL с выбором CASE

Запрос MYSQL с выбором CASE

Есть таблица с картинками

186