如何从goole.maps.places API getPlacePredictions宣传回调?

时间:2017-08-21 11:38:23

标签: javascript

我正在尝试宣传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();
    });
}

1 个答案:

答案 0 :(得分:2)

你正在做大多数事情。要改变的事情:

  1. 您需要从函数中返回承诺。最后添加return dfd.promise();

  2. 您<{1}}来电

  3. 所以:

    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;)。