2017-08-27 119 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。