我有一个javascript方法addressAutocomplete
,只要输入字段发生变化,就会调用它。在其中我调用谷歌地图方法来根据当前输入获得预测。
我的问题是我希望我的addressAutocomplete
方法返回预测,而我无法找到实现此目的的方法。最好的方法是什么?
我的代码(回复不起作用)
var addressAutocomplete = function(input) {
var service = new google.maps.places.AutocompleteService();
return service.getQueryPredictions({ input: input }, predictionsCallback);
};
function predictionsCallback(predictions, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
alert(status);
return;
}
return predictions;
}
答案 0 :(得分:1)
您目前获得undefined
,对吗?问题是你试图从异步操作中返回值,这些操作不会起作用。在predictions
调用回调函数之前,您无法访问getQueryPredictions
,并且无法从回调函数返回值。 service.getQueryPredictions
没有返回值,它只是在异步操作完成时调用回调函数。
我不确定如果没有更多的上下文(例如调用或注册addressAutocomplete
的地方)我可以进一步帮助你。你需要的是使用连续传递风格或者可能使用promises。 #39;描述你可能需要做的事情:
var addressAutocomplete = function(input) {
var service = new google.maps.places.AutocompleteService();
//you can't return this line because it's an async function
service.getQueryPredictions({ input: input }, function (predictions, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
alert(status);
}
//again, we can't return a value here, but we can pass it to another function!
// this is not exactly how you should do it, just an example
// Only stringifying it here for example, since I don't know the shape of the predictions object
$('.autocomplete-results').text(JSON.stringify(predictions));
});
};
编辑:只需将文本添加到DOM即可。在这里,我抓住了我想用jquery更新的元素,然后将其文本设置为字符串化的预测对象。我不知道预测是什么样的,但是你可能想要定义一个辅助函数来解析和格式化文本,然后更新DOM。
答案 1 :(得分:1)
这可能不是最好的方法,但是现在这就是我的工作方式。如果您有更好的解决方案,请告诉我。
var addressPredictions;
var addressAutocomplete = function(input) {
var service = new google.maps.places.AutocompleteService();
service.getQueryPredictions({ input: input }, predictionsCallback);
return addressPredictions;
};
function predictionsCallback(predictions, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) return;
addressPredictions = predictions;
}