【发布时间】:2017-03-08 12:49:48
【问题描述】:
我有 2 个 API 调用。
第二次 API 调用取决于返回的属性 ID 以进行第二次 API 调用以检查这些属性中的每一个是否有停车位。
如果是这样,那么我将该属性的详细信息添加到一个对象并将该对象推送到一个数组中。
第二个 API 调用嵌套在第一个中。循环完所有属性后,我检查数组长度是否大于0,如果是,则可以在页面中显示返回的属性,否则显示错误。
问题是即使有停车返回的属性,else语句或错误函数也会执行,以及在页面上显示属性。
有没有办法在检查我的 Array 是否大于 0 之前完成嵌套的 Promise?
这是我的代码:
$scope.viewPropertyList = function(latlong) {
$scope.locationError = false;
var latlongArray = latlog.split('::');
var searchLat_scope = latlongArray[0];
var searchLon_scope = latlongArray[1];
if (searchLat_scope && searchLon_scope) {
var data = Property.getAllProperties({
dest: 'property',
apikey: API_KEY,
lat: encodeURIComponent(searchLat_scope),
limit: 10,
lon: encodeURIComponent(searchLon_scope)
}).$promise.then(function(success) {
var propertyMarkers = [];
$scope.dbMarkers = 0;
for (var i = 0, l = success.property.length; i < l; i++) {
(function(i) {
Property.getProperty({
dest: 'property',
propertyId: success.property[i].name,
apikey: API_KEY
}).$promise.then(function(propertyData) {
for (var j = 0, k = propertyData.services.length; j < k; j++) {
if (propertyData.services[j].name === "parking") {
var obj = {
"propertyName": success.property[i].propertyName,
"telephone": success.property[i].telephone,
"postcode": success.property[i].address.postcode,
"city": success.property[i].address.city,
"county": success.property[i].address.county,
"addressLine1": success.property[i].address.addressLine1
};
propertyMarkers.push(obj);
}
}
if (propertyMarkers.length != 0) {
$scope.dbMarkers = propertyMarkers;
$scope.selectedLat = searchLat_scope;
$scope.selectedlog = searchLon_scope;
} else {
$scope.locationErr = true;
$scope.errorMsg = "No properties found";
}
});
})(i);
}
}, function(error) {
$scope.locationErr = true;
$scope.errorMsg = "Something went wrong, please try again";
});
}
}
【问题讨论】:
标签: angularjs api http nested promise