我的Javascript函数不断返回undefined

时间:2017-10-29 17:39:15

标签: javascript node.js undefined foursquare

我有一个名为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;
}




1 个答案:

答案 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的方法,您可以尝试一下