我正在尝试创建一个函数,该函数在传递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的运行速度快于解析完成的速度。我该如何解决这个问题?
答案 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;
})
}