我正在尝试创建一个在传递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运行得比解析完成得快。我怎么能解决这个问题呢?
这是因为您没有在函数中返回任何内容:
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,但它必须包含在异步函数中
另一个可能的原因也可能是由于您的函数没有接受任何参数,因此在调用函数时没有对您传递的URL发出请求。
你的代码应该是这样的
function JaySon(url){
request({url: url,json: true}, function (error, response, body) {
return body;
})
}