2017-08-27 97 views
-1

我声明变量名称与一个空的数组值出功能,然后用它在函数内分配返回的值,然后我想用它在这个函数以外,但外面该变量的功能保持为空。 请解释我做错了什么。我不能使用变量功能

handleUpdateInputBusinessName = (searchText) => { 
    var names = []; 
    var displaySuggestions = function(predictions, status) { 
     if (status !== google.maps.places.PlacesServiceStatus.OK) { 
     alert(status); 
     return; 
     } 

     predictions.forEach(function(prediction) { 
     let name = prediction.description; 
     names.push(name); 
     }); 

     console.log('names_in:', names); // valid predictions from Google Maps Service 
     return names;  
    }; 

    console.log('names_out:', names); // [] 

    var service = new google.maps.places.AutocompleteService(); 
    service.getQueryPredictions({ input: searchText, types: '(cities)'  
    }, displaySuggestions); 
+1

您是否考虑过使用'state'而不是? – Nocebo

+0

remove var names = [];这条线内功能。 –

回答

0

这里的归结版本:

a = []; 
 
var b =() => { 
 
    a.push(1); 
 
    console.log('inside:', a) 
 
}; 
 
console.log('outside:', a); 
 
b();

“外”控制台日志是displaySuggestions功能运行前被调用,所以数据尚未填充在阵列。

0

您必须使用js匿名函数语法来扩大名称数组的范围,下面是代码。

handleUpdateInputBusinessName = (searchText) => { 
    var names = []; 
    var displaySuggestions = (predictions, status) => { 
     if (status !== google.maps.places.PlacesServiceStatus.OK) { 
     alert(status); 
     return; 
     } 
    predictions.forEach((prediction) => { 
    let name = prediction.description; 
    names.push(name); 
    }); 

    console.log('names_in:', names); // valid predictions from Google Maps Service 
    return names;  
}; 

console.log('names_out:', names); // [] 

var service = new google.maps.places.AutocompleteService(); 
service.getQueryPredictions({ input: searchText, types: '(cities)'  
}, displaySuggestions); 

希望这个heps。