我正在尝试宣传Google Maps API功能,但似乎没有成功。在调用我的函数时,我得到@Component
public class Log {
...
。
我尝试按照此主题中的示例进行操作,但没有运气:Turn callback into promise
回调函数如下所示:
Cannot read property 'then' of undefined
我的承诺看起来像这样:
predictionService = new google.maps.places.AutocompleteService();
predictionService.getPlacePredictions(
{ input: '1 main street, south bend' },
displayPredictionSuggestionsCallback
);
function displayPredictionSuggestionsCallback( input ){
// output results
}
这是调用服务的函数:
predictionService = new google.maps.places.AutocompleteService();
function getPredictionSuggestion ( input ){
var dfd = $.Deferred();
predictionService.getPlacePredictions( {
input: input
}, function (place, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
return dfd.reject("Request failed: " + status);
}
dfd.resolve( place ).promise();
});
}
答案 0 :(得分:2)
你正在做大多数事情。要改变的事情:
您需要从函数中返回承诺。最后添加return dfd.promise();
。
您
您<{1}}来电
所以:
return
jQuery&#39; else
的那个。您可能希望使用原生.promise()
,如果需要,可以使用polyfill:
resolve
请注意predictionService = new google.maps.places.AutocompleteService();
function getPredictionSuggestion ( input ){
var dfd = $.Deferred();
predictionService.getPlacePredictions( {
input: input
}, function (place, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
dfd.reject("Request failed: " + status); // ***
} else { // ***
dfd.resolve( place ); // ***
} // ***
});
return dfd.promise(); // ***
}
与Deferred
的使用。一般情况下,使用带有拒绝的Promise
非常有用,因为它提供了上下文(其中出现&#34;错误&#34;)。