Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript承诺失败了_Javascript_Angularjs_Promise_Q - Fatal编程技术网

javascript承诺失败了

javascript承诺失败了,javascript,angularjs,promise,q,Javascript,Angularjs,Promise,Q,请帮帮我…我做错了什么 在我的控制器中,我有一个调用google的geocoder的函数,我试图将它嵌入到一个承诺中,让结果在$scope中正确返回。我已经经历了20次不同的迭代,但仍然无法让它工作。函数工作,我得到结果…但我无法将结果放入$scope…当尝试将地理编码器封装为承诺时,它会给我错误无法读取未定义的属性“then” function getPosition(thisLat,thisLon) { // Retrieve address information based

请帮帮我…我做错了什么

在我的控制器中,我有一个调用google的geocoder的函数,我试图将它嵌入到一个承诺中,让结果在$scope中正确返回。我已经经历了20次不同的迭代,但仍然无法让它工作。函数工作,我得到结果…但我无法将结果放入$scope…当尝试将地理编码器封装为承诺时,它会给我错误
无法读取未定义的属性“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
逐字向下移动一行。啊!不用担心,有时可能会是这样!祝你的项目一切顺利:-)