2015-08-17 6 views
0

Я использую Angular JS. Моя цель - получить список изображений flickr на основе местоположения и взять идентификаторы изображений, возвращенные из запроса, и передать их в другой запрос, чтобы получить больше информации для каждой фотографии, которая будет отображаться в результатах. Вот что я имею, но я не могу получить правильное значение, возвращенное из моей второй функции поиска. Хотя это кажется длинным вопросом, я просто хочу знать, как получить правильное значение в моей второй функции, чтобы я мог назначить его моим результатам.Flickr API - Получить идентификатор изображения и перейти ко второму запросу

Это в моем 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 

             }); 

           } 

Эта функция возвращает список изображений идентификаторов для фотографий Geotagged в давание широту/долготу, но не возвращает фактические данные о местоположении в результатах для меня перейти к результатам и построить точку карта. Поэтому вы увидите, что в моих результатахPosts.push я пытаюсь передать идентификатор возвращенного изображения в функцию 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

Функция, которую вы вызываете для назначения значений lat/long, является асинхронной, поэтому я считаю, что вы будете назначать ее до ее разрешения. Попробуйте получать данные первого и, как только вы извлекаться его, присвоить данные, что-то вроде этого:

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 

     }); 

}); 

 Смежные вопросы

  • Нет связанных вопросов^_^