在npm请求函数之外获取值

时间:2018-06-28 12:31:13

标签: javascript json function npm request

我正在尝试创建一个函数,该函数在传递URL时解析json。它会对其进行解析,并且如果我尝试将其记录在请求中,那么它会起作用,但是我无法返回此值。

function JaySon(){
    request({url: url,json: true}, function (error, response, body) {
        return body;
    })
}

var url ="http://api.geonames.org/findNearbyPlaceNameJSON?lat=51.9877644&lng=-1.47866&username=demo";
var x = JaySon(url);

console.log("json:"+x);

控制台仅记录“ json:undefined”,据我了解,这是因为console.log的运行速度快于解析完成的速度。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

这是因为您没有在函数中返回任何内容:

async function JaySon(url) {
  return new Promise((resolve, reject) => {
    request({ url: url, json: true }, function(err, res, body) {
      if (err) reject(err);
      else resolve(body);
    });
  });
}

像这样使用它:

Jayson('your_url').then(data => data)

或使用async / await,但必须将其包装在异步函数中

答案 1 :(得分:0)

另一个可能的原因也可能是由于您的函数没有任何参数,因此在调用函数时没有对您传递的URL的请求。

您的代码应类似于

function JaySon(url){
request({url: url,json: true}, function (error, response, body) {
    return body;
})

}