我有以下功能,它正确地从响应中获取图像的前缀和后缀,并产生一个变量结果,它保存了场地图像的url。但是当我返回结果时,我一直没有定义。这里出了什么问题?
function getPhotoUrl(venue_id,venue_location,venue_query){
request({
url: 'https://api.foursquare.com/v2/venues/'+venue_id+'/photos',
json:true,
method: 'GET',
qs: {
client_id: 'my_id',
client_secret: 'my_secret',
near:venue_location,
query: venue_query,
v: '20171114',
limit: 1
}
}, function(err, res, body) {
var result="";
if (err) {
console.error(err);
} else {
console.log(body.response.photos.items[0].prefix+"300x500"+body.response.photos.items[0].suffix);
}
result=body.response.photos.items[0].prefix+"300x500"+body.response.photos.items[0].suffix;
return result;
}
);
}
<!-- begin snippet: js hide: false console: true babel: false -->
答案 0 :(得分:0)
尝试使用async / await
。将您的执行包含在承诺中resolve
返回值和reject
错误值。这样你就可以等待函数并获得返回值。请记住await
会停止执行,直到完成返回的承诺。
function getPhotoUrl(venue_id,venue_location,venue_query){
return new Promise((resolve, reject) => {
request({
url: 'https://api.foursquare.com/v2/venues/'+venue_id+'/photos',
json:true,
method: 'GET',
qs: {
client_id: 'my_id',
client_secret: 'my_secret',
near:venue_location,
query: venue_query,
v: '20171114',
limit: 1
}
}, function(err, res, body) {
var result="";
if (err)
reject(err);
}
result=body.response.photos.items[0].prefix+"300x500"+body.response.photos.items[0].suffix;
resolve(result);
});
})
}
await getPhotoUrl('', '', '')