Javascript承诺请求…然后返回未定义的,尽管它存在

Javascript承诺请求…然后返回未定义的,尽管它存在,javascript,promise,request,Javascript,Promise,Request,执行以下函数时,我收到一个错误,说明: UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 362): TypeError: request(...).then is not a function 我不知道这个错误消息的原因,尽管我认为它与我的请求有关。根据“请求-承诺”的要求,如果格式正确,我的代码 const request = require('request-promise'); a

执行以下函数时,我收到一个错误,说明:

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
        })
      );
    } 
  }
);
} }

我尝试过传递一个“选项”参数,例如

var options = {
uri: 'http://www.google.com',
transform: function (body) {
    return cheerio.load(body);
}
尽管这仍然不起作用


有人知道为什么请求…然后抛出错误吗

你做错了。您需要
解析(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');
    }
  }
);
}

避开这个!您确定您使用的是
请求承诺
而不是
请求
?您使用的是哪个版本的
请求承诺
?您做错了。我正在下决心@BergiThis没有解释OP的代码为什么不工作。从
请求承诺
的文档中可以看出,
请求(…)。那么
应该是一个函数。这个答案表明对承诺如何工作缺乏基本的理解。