- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图 promise Google map API 功能,但似乎没有成功。调用我的函数时,我收到 Cannot read property 'then' of undefined
。
我尝试按照此线程中的示例进行操作,但没有成功:Turn callback into promise
回调函数如下所示:
predictionService = new google.maps.places.AutocompleteService();
predictionService.getPlacePredictions(
{ input: '1 main street, south bend' },
displayPredictionSuggestionsCallback
);
function displayPredictionSuggestionsCallback( input ){
// output results
}
我的 promise 是这样的:
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();
});
}
这是调用服务的函数:
getPredictionSuggestion( '1 main street, south bend' ).then( function(results) {
console.log( 'promise results = ' + results );
}, function( err ) {
alert(err);
});
最佳答案
你做的大部分事情都是正确的。需要改变的事情:
您需要从函数返回 promise 。在末尾添加 return dfd.promise();
。
您不需要在回调中使用return
,只需else
即可。
您不需要在resolve
调用中需要.promise()
。
所以:
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(); // ***
}
<小时/>
这是 jQuery 的延迟
。您可能想使用原生的 Promise,如果需要的话可以使用 polyfill:
predictionService = new google.maps.places.AutocompleteService();
function getPredictionSuggestion(input) {
return new Promise(function(resolve, reject) {
predictionService.getPlacePredictions( {
input: input
}, function (place, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
reject(new Error(status));
} else {
resolve(place);
}
});
});
}
请注意 new Error
与 reject
的使用。一般来说,将Error
与reject结合使用非常有用,因为它提供了上下文(“错误”发生的位置)。
关于javascript - 如何 promise 来自 google.maps.places API getPlacePredictions 的回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45796155/
我正在为我们的网站开发一个搜索插件,该插件允许用户使用 Google Places API 搜索任何位置,并列出我们的公寓及其到该位置的距离。 为了限制对用户的搜索,我向该方法添加了一些可能的限制:g
我正在尝试为谷歌地点自动完成实现自定义 UI,因为预建的 UI 不允许我手动选择结果。在 getPlacePredictions 函数选项中不使用多种类型时,一切正常,但当我使用 ['(regions
autocompleteService.getPlacePredictions 和有什么区别和 autocompleteService.getPredictions在 Google map 自动填充服
我试图 promise Google map API 功能,但似乎没有成功。调用我的函数时,我收到 Cannot read property 'then' of undefined 。 我尝试按照此线
我是一名优秀的程序员,十分优秀!