谷歌地理编码器和jQuery
我想知道,是否有办法让jQuery推迟与Google Geocoder的合作。我试过这样的方法:谷歌地理编码器和jQuery,jquery,jquery-deferred,google-geocoder,Jquery,Jquery Deferred,Google Geocoder,我想知道,是否有办法让jQuery推迟与Google Geocoder的合作。我试过这样的方法: // ... _geocoder: function( address ) { if ( !this.props.geocoder ) { this.props.geocoder = new google.maps.Geocoder(); } var deferred = $.Deferred(), geocoder;
// ...
_geocoder: function( address ) {
if ( !this.props.geocoder ) {
this.props.geocoder = new google.maps.Geocoder();
}
var deferred = $.Deferred(),
geocoder;
geocoder = this.props.geocoder.geocode( { 'address': address }, function( results, status ) {
if ( status === google.maps.GeocoderStatus.OK ) {
deferred.resolve({
lat: results[ 0 ].geometry.location.k,
lng: results[ 0 ].geometry.location.A
});
} else {
deferred.reject();
}
return deferred.promise();
});
$.when( geocoder() ).then(
function( data ) {
alert( status );
},
function() {
alert( "Defer rejected" );
}
);
},
// ...
但是google.maps.Geocoder不会返回jQuery延迟对象,因此此代码无法按预期工作。还有别的办法吗?
我不确定是否延期退货;或者,因为我看了一些代码示例,它们只是使用return-deferred;。有什么不同吗?我会这样做:
// ...
_geocoder: function(address) {
var geocoder = this.props.geocoder;
if (!geocoder) {
geocoder = this.props.geocoder = new google.maps.Geocoder();
}
return $.Deferred(function(dfrd) {
geocoder.geocode({'address': address}, function(results, status) {
if(status === google.maps.GeocoderStatus.OK) {
dfrd.resolve(results[0]);
} else {
dfrd.reject(new Error(status));
}
});
}).promise();
},
// ...
注意:通过使用整个results[0]对象解析Deferred,承诺链中就可以获得更多潜在可用的数据。看
测试如下:
yourNamespace._geocoder('some address').then(function(result) {
console.dir(result.geometry.location);
}, function(err) {
console.error(err);
});