我有一个名为getIt()
的函数,通过Foursquare API查找前5个场所。在getVenues()
内,我按位置数组中的第一个场地项目的名称,因为它似乎通常存在于其中。但是,当我调用该函数并将其设置为变量位置时,我得到undefined
。怎么了?
var place=getIt();
console.log(place[0]);
function getIt(){
var params={
"near":"Athens,Gr",
"query":"sushi",
"limit":5
}
var places=[];
foursquare.getVenues(params, function(error, venues) {
console.log(venues.response.venues[0].name);
places.push(venues.response.venues[0])
console.log(places[0].name);
});
//console.log(venues.response.venues[0]);
return places;
}

答案 0 :(得分:3)
您的代码是异步的。这意味着您使用的函数不会阻止执行后面的代码。你基本上发送一个请求,但不要等待,你只需说“当响应到达时,用结果填充这个数组,如果没有发生错误,否则处理错误(你应该) ”。在您的getIt
函数中,您可以创建一个数组,并立即将其返回。它将在以后填充。但是在执行places
函数后,undefined
数组立即为空,因此其第一个元素为getIt
。您有两种选择:
在回调中进行操作,或者为function getIt(params, callback) {
foursquare.getVenues(params, function(error, venues) {
if (!error) callback(venues)
});
}
getIt(someParams, function(venues) {// handle venues here})
函数提供回调:
async
另一个选项是input {}
关键字。如果您使用支持它的Javascript版本(ES6或更高版本,如果我没记错的话),并且foursquare API有返回Promise的方法,您可以尝试一下