Запрос обещания Javascript ... затем возвращает неопределенный, хотя он существует - PullRequest
0 голосов
/ 24 апреля 2018

При выполнении указанной ниже функции появляется сообщение об ошибке:

UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 362): TypeError: request(...).then is not a function

Мне не известны причины этого сообщения об ошибке, хотя я предполагаю, что оно как-то связано с моим запросом. В соответствии с документацией для "запроса-обещания" мой код правильно отформатирован.

const request = require('request-promise');

addressFunction(lat,lon){
var error = "No Address Data"
var addressExist = true;

return new Promise(
  function(resolve){
    if(addressExist) {
      let apiKey = "API-Key";
      let geocodeAddress = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lon + "&key=" + apiKey;

      resolve(
        request(geocodeAddress).then(res => {
          res = JSON.parse(res);
          newAddress = res.results[0].formatted_address.replace(/^\d+\s*/, '');
          newAddress = newAddress.split(',', 3).join(',').replace(/[0-9]/g, '').trim()
          return newAddress
        })
      );
    } 
  }
);

} }

Я пытался передать аргумент "options", такой как

var options = {
uri: 'http://www.google.com',
transform: function (body) {
    return cheerio.load(body);
}

Хотя это все еще не работало.

Кто-нибудь имеет представление о том, почему запрос ... а затем выдает ошибки?

1 Ответ

0 голосов
/ 24 апреля 2018

Вы делаете это неправильно. Вам нужно resolve(newAddress) не полное обещание вызова API

function someFunction () {
   return new Promise(function(resolve, reject){
    if(addressExist) {
      let apiKey = "API-Key";
      let geocodeAddress = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lon + "&key=" + apiKey;

     request(geocodeAddress).then(res => {
          res = JSON.parse(res);
          newAddress = res.results[0].formatted_address.replace(/^\d+\s*/, '');
          newAddress = newAddress.split(',', 3).join(',').replace(/[0-9]/g, '').trim()
          resolve(newAddress);
        }).catch(error => {
          console.log(error);
          resolve('some other values based on logic');
        });

    } else {
       resolve('some other value based on logic');
    }
  }
);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...