我正在使用Angular JS。我的目标是根据位置获取flickr图像列表,并从请求中返回图像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
});
}
此函数返回给定lat / long中地理标记的照片的图像ID列表,但不返回结果中的实际位置数据,以便传递给结果并在地图上绘制点。所以你会在我的resultsPosts.push中看到我试图用这行(PostLatitude: $scope.fkrGetLatLng(data.photos.photo[i].id))
将返回的图像Id传递给fkrGetLatLng函数......函数看起来像这样。
$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 :(得分: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
});
});