Resolve не определен, используя не встроенную функцию, как обещает callj nodejs - PullRequest
0 голосов
/ 20 сентября 2018

Я хочу создать универсальную функцию обратного вызова, которую могут использовать все мои функции REST, в этом случае она называется defaultCallback и определена ниже.Проблема в том, что я получаю сообщение об ошибке «Не определено», когда я его ударил.Возможна ли эта парадигма использования не встроенной функции в качестве обратного вызова?И если так, что я делаю не так?Вот мой код

function getUsingRest() {
    return new Promise(function (resolve, reject) { 
      request({
      url: url,
      headers: headers
    }, function(error, response) {
          defaultCallback(error, response);
      });
    });
  }

  function defaultCallback(error, response) {
    if(error) {
        reject(error);
      } else {
        resolve(JSON.parse(response.body));
      }
  }

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Да, вам нужно объявить defaultCallback внутри конструктора new Promise, чтобы иметь в области видимости переменные resolve и reject.Просто отбросьте этот «обратный вызов по умолчанию» и напишите

function getUsingRest() {
  return new Promise(function (resolve, reject) { 
    request({
    url: url,
    headers: headers
  }, function(error, response) {
    if (error) {
      reject(error);
    } else {
      resolve(JSON.parse(response.body));
    }
  });
}

или лучше

function getUsingRest() {
  return new Promise(function(resolve, reject) { 
    request({
    url: url,
    headers: headers
  }, function(error, response) {
    if (error) {
      reject(error);
    } else {
      resolve(response);
    }
  }).then(response => JSON.parse(response.body));
}

, чтобы исключения из JSON.parse перехватывались и приводили к отклонению обещания.

Если вы настаиваете на том, чтобы сделать этот обратный вызов обещания «по умолчанию» универсальным, чтобы вы могли разделить его между несколькими функциями, взгляните на util.promisify (и его реализацию, если вам интересно).

0 голосов
/ 20 сентября 2018

Не нужно переносить defaultCallback анонимной функцией
Попробуйте изменить

 request(json, function(error, response) {
      defaultCallback(error, response);
  });

на

request(json, defaultCallback);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...