javascript 承诺失败
javascript promise failing on then
请帮忙...我做错了什么。
在我的控制器中,我有这个调用 google 的地理编码器的函数,我试图将它嵌入到承诺中,以便在 $scope 中正确返回结果。我经历了 20 次不同的迭代,但仍然无法正常工作。这些功能有效,我得到了结果......但我无法将结果放入 $scope......当试图将地理编码器封装到一个承诺中时它给我错误 Cannot read property 'then' of undefined
function getPosition(thisLat,thisLon) {
// Retrieve address information based on Lat/Lng info
var q = $q.defer() ;
var thisLocation = getLL(thisLat,thisLon) ;
var addressInfo = {};
var notFound = 0 ;
geoCoder.geocode({'latLng': thisLocation}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
for (var x=0;x<results.length;x++) {
var googleInfo = results[x].address_components ;
for (var y=0;y<googleInfo.length;y++) {
addressInfo.fullAddress = results[x].formatted_address;
q.resolve(addressInfo) ;
}
}
} else {
return q.reject("none" ) ;
}
return q.promise ;
});
}
$scope.getEntrances = function() {
for (var x=0;x<$scope.park.entrances.length;x++) {
getPosition($scope.park.entrances[x].coordinates[0],$scope.park.entrances[x].coordinates[1])
.then(function(result) {
$scope.park.entrances[x].addressInfo = result ;
}) ;
}
}
$scope.getEntrances() ;
尝试从 getPosition()
函数本身返回您的承诺 q
,而不是从 geoCoder
的回调函数中返回。
简而言之,将 return q.promise;
移动到 getPosition()
函数的末尾,如下所示:
function getPosition(thisLat,thisLon) {
// Retrieve address information based on Lat/Lng info
var q = $q.defer() ;
var thisLocation = getLL(thisLat,thisLon) ;
var addressInfo = {};
var notFound = 0 ;
geoCoder.geocode({'latLng': thisLocation}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
for (var x=0;x<results.length;x++) {
var googleInfo = results[x].address_components ;
for (var y=0;y<googleInfo.length;y++) {
addressInfo.fullAddress = results[x].formatted_address;
q.resolve(addressInfo) ;
break; // [UPDATE] Avoid calling resolve on a promise multiple times
}
}
} else {
q.reject("none" ) ; // [UPDATE] Don't need a return statement here
}
});
// [UPDATE] return q.promise from here
return q.promise ;
}
请帮忙...我做错了什么。
在我的控制器中,我有这个调用 google 的地理编码器的函数,我试图将它嵌入到承诺中,以便在 $scope 中正确返回结果。我经历了 20 次不同的迭代,但仍然无法正常工作。这些功能有效,我得到了结果......但我无法将结果放入 $scope......当试图将地理编码器封装到一个承诺中时它给我错误 Cannot read property 'then' of undefined
function getPosition(thisLat,thisLon) {
// Retrieve address information based on Lat/Lng info
var q = $q.defer() ;
var thisLocation = getLL(thisLat,thisLon) ;
var addressInfo = {};
var notFound = 0 ;
geoCoder.geocode({'latLng': thisLocation}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
for (var x=0;x<results.length;x++) {
var googleInfo = results[x].address_components ;
for (var y=0;y<googleInfo.length;y++) {
addressInfo.fullAddress = results[x].formatted_address;
q.resolve(addressInfo) ;
}
}
} else {
return q.reject("none" ) ;
}
return q.promise ;
});
}
$scope.getEntrances = function() {
for (var x=0;x<$scope.park.entrances.length;x++) {
getPosition($scope.park.entrances[x].coordinates[0],$scope.park.entrances[x].coordinates[1])
.then(function(result) {
$scope.park.entrances[x].addressInfo = result ;
}) ;
}
}
$scope.getEntrances() ;
尝试从 getPosition()
函数本身返回您的承诺 q
,而不是从 geoCoder
的回调函数中返回。
简而言之,将 return q.promise;
移动到 getPosition()
函数的末尾,如下所示:
function getPosition(thisLat,thisLon) {
// Retrieve address information based on Lat/Lng info
var q = $q.defer() ;
var thisLocation = getLL(thisLat,thisLon) ;
var addressInfo = {};
var notFound = 0 ;
geoCoder.geocode({'latLng': thisLocation}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
for (var x=0;x<results.length;x++) {
var googleInfo = results[x].address_components ;
for (var y=0;y<googleInfo.length;y++) {
addressInfo.fullAddress = results[x].formatted_address;
q.resolve(addressInfo) ;
break; // [UPDATE] Avoid calling resolve on a promise multiple times
}
}
} else {
q.reject("none" ) ; // [UPDATE] Don't need a return statement here
}
});
// [UPDATE] return q.promise from here
return q.promise ;
}