2015-08-17 51 views
0

我正在使用Angular JS。我的目标是获取基于位置的flickr图像列表,并将请求返回的图像ID传递给另一个请求,以获取每张照片的更多信息以显示在结果中。这是我的,但我似乎无法从我的第二个搜索功能返回正确的值。虽然这似乎是一个很长的问题,但我真的只想知道如何在第二个函数中获得正确的值,以便将其分配给我的结果。Flickr API - 获取图像ID并传递给第二个请求

这是我services.js

//flickr location search 
APIRequest.fkrSearch = function(lat, lon, rad){ 
    fkrAPI = $resource('https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=5956ffe850b325e0b121525800af5b31&lat='+lat+'&lon='+lon+'&radius=5km&format=json&nojsoncallback=1', { dataType: 'jsonp', jsonp: 'jsoncallback' }); 
    return fkrAPI.get().$promise.then(function (data){ 
     console.log(data); 
     return data; 
     }); 
    }; 

这里是我的控制器中我的要求。

$scope.resultPosts = []; //global variable to hold results 

    if ($scope.locationSearch.dataSource.fkr){ 
       $scope.fkrLoading = true; 
       console.log('search Flickr'); 
       OSINTAPIRequest.fkrSearch($scope.lat, $scope.lng, $scope.radius).then(function(data){ 
        if (data.error){ 
          toastr.error(data.error.error_msg, 'Flickr Error['+data.error.error_code+']'); 
         } else { 
          if (data.photos.photo.length > 0){ 
           var fkrAppend = 0; 
           for(var i=0; i < data.photos.photo.length; i++){ 
            fkrAppend++; 

            var fkrImageId = data.photos.photo[i].id; 

            $scope.resultPosts.push({ 
                 SourcePostID: data.photos.photo[i].id, 
                 Timestamp: '', 
                 PostLatitude: $scope.fkrGetLatLng(data.photos.photo[i].id), 
                 PostLongitude: $scope.fkrGetLatLng(data.photos.photo[i].id), 
                 PostMedia: 'https://farm'+data.photos.photo[i].farm+'.staticflickr.com/'+data.photos.photo[i].server+'/'+data.photos.photo[i].id+'_'+data.photos.photo[i].secret+'.jpg', 
                 PostType: 'image', 
                 PostAvatar: 'https://pingendo.github.io/pingendo-bootstrap/assets/user_placeholder.png', 
                 PostMarker: 'assets/img/fkrMarker.png', 
                 DataSource: 'flickr', 
                 Display:$scope.resultFilter.fkr 

             }); 

           } 

该函数返回在给定纬度/经度地理标记照片的图像ID列表,但结果不返回的实际位置数据,我要传递给结果以及绘制点地图。所以你会看到,在我的resultsPosts.push我想通过返回的图像ID到fkrGetLatLng函数(PostLatitude: $scope.fkrGetLatLng(data.photos.photo[i].id)) ...函数看起来像这样。

$scope.fkrGetLatLng = function (fkrImageId){ 
     OSINTAPIRequest.fkrGetLatLong(fkrImageId).then(function(data){ 
      var fkrLat = data.photo.location.latitude; 
      var fkrLng = data.photo.location.latitude; 
      //console.log (fkrLat+','+fkrLng); 
      return fkrLat; 

    }); 
} 

而这是服务JS中的请求。我为每个请求获取正确的数据,但它不会为PostLatitude指定正确的值(或任何值)。

//flickr location search - get lat long 
    APIRequest.fkrGetLatLong = function(fkrImageId){ 
     fkrAPI = $resource('https://api.flickr.com/services/rest/?method=flickr.photos.geo.getLocation&api_key=5956ffe850b325e0b121525800af5b31&photo_id='+fkrImageId+'&format=json&nojsoncallback=1', { dataType: 'jsonp', jsonp: 'jsoncallback' }); 
     return fkrAPI.get().$promise.then(function (data){ 
      //console.log(data); 
      return data; 
     }); 
    }; 
+0

你的意思是data.photo.location.latitude分配到两个fkrLat和fkrLng在fkrGetLatLng? –

+0

不完全。我只是在试图让fkrGetLatLng返回两个值之前测试函数。 – cmgsakell

回答

0

您呼叫分配纬度/长值的功能是异步,所以我认为这是解决之前,你会被分配。尝试获得的数据第一,在您检索它,分配数据,这样的事情:

var fkrImageId = data.photos.photo[i].id; 
    $scope.fkrGetLatLng(data.photos.photo[i].id). 
    then(function(data){ 
     $scope.resultPosts.push({ 
       SourcePostID: data.photos.photo[i].id, 
       Timestamp: '', 
       PostLatitude: data.lat, 
       PostLongitude: data.long, 
       PostMedia: 'https://farm'+data.photos.photo[i].farm+'.staticflickr.com/'+data.photos.photo[i].server+'/'+data.photos.photo[i].id+'_'+data.photos.photo[i].secret+'.jpg', 
       PostType: 'image', 
       PostAvatar: 'https://pingendo.github.io/pingendo-bootstrap/assets/user_placeholder.png', 
       PostMarker: 'assets/img/fkrMarker.png', 
       DataSource: 'flickr', 
       Display:$scope.resultFilter.fkr 

     }); 

}); 
相关问题