javascript承诺失败了
请帮帮我…我做错了什么 在我的控制器中,我有一个调用google的geocoder的函数,我试图将它嵌入到一个承诺中,让结果在$scope中正确返回。我已经经历了20次不同的迭代,但仍然无法让它工作。函数工作,我得到结果…但我无法将结果放入$scope…当尝试将地理编码器封装为承诺时,它会给我错误javascript承诺失败了,javascript,angularjs,promise,q,Javascript,Angularjs,Promise,Q,请帮帮我…我做错了什么 在我的控制器中,我有一个调用google的geocoder的函数,我试图将它嵌入到一个承诺中,让结果在$scope中正确返回。我已经经历了20次不同的迭代,但仍然无法让它工作。函数工作,我得到结果…但我无法将结果放入$scope…当尝试将地理编码器封装为承诺时,它会给我错误无法读取未定义的属性“then” function getPosition(thisLat,thisLon) { // Retrieve address information based
无法读取未定义的属性“then”
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(thisLat,thisLon){
//根据Lat/Lng信息检索地址信息
var q=$q.defer();
var thisLocation=getLL(thisLat,thisLon);
var addressInfo={};
var notFound=0;
geoCoder.geocode({'latLng':thisLocation},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
对于(var x=0;x请尝试从
getPosition()
函数本身返回承诺,而不是从geoCoder
的回调函数返回承诺
简而言之,shift将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 ;
}
函数getPosition(thisLat,thisLon){
//根据Lat/Lng信息检索地址信息
var q=$q.defer();
var thisLocation=getLL(thisLat,thisLon);
var addressInfo={};
var notFound=0;
geoCoder.geocode({'latLng':thisLocation},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
对于(var x=0;x请尝试从
getPosition()
函数本身返回承诺,而不是从geoCoder
的回调函数返回承诺
简而言之,shift将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 ;
}
函数getPosition(thisLat,thisLon){
//根据Lat/Lng信息检索地址信息
var q=$q.defer();
var thisLocation=getLL(thisLat,thisLon);
var addressInfo={};
var notFound=0;
geoCoder.geocode({'latLng':thisLocation},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
对于(var x=0;x为什么人们没有留下评论就否决了这个问题?移动
return q.promise;
down two line为什么人们没有留下评论就否决了这个问题?移动return q.promise;
down two line hanks!!!我不敢相信我盯着这个问题玩了好几个小时。我对这个问题感到非常失望我自己,我浪费了很多时间想弄明白,解决办法是把return q.promise
从字面上往下移一行。啊!不用担心,有时候可能是这样的!祝你的项目一切顺利:-)谢谢!!!我简直不敢相信我盯着它玩了这么多小时。我对自己感到非常沮丧,我浪费了这么多时间试图弄明白它,解决方案是将返回q.promise
逐字向下移动一行。啊!不用担心,有时可能会是这样!祝你的项目一切顺利:-)