Ich habe 2 API-Aufrufe.Angular geschachtelt Versprechen zeigt einen Fehler
Der zweite API-Aufruf ist abhängig von der Property-ID den zweiten API-Aufruf zu machen, zurück Parkplatz zu überprüfen, ob jede dieser Eigenschaften hat.
Wenn dies der Fall ist, füge ich Details dieser Eigenschaft zu einem Objekt hinzu und schiebe das Objekt in ein Array.
Der zweite API-Aufruf ist innerhalb des ersten verschachtelt. Nachdem ich alle Eigenschaften durchlaufen habe, überprüfe ich, ob die Array-Länge mehr als 0 ist. Wenn es dann ist, kann ich die zurückgegebenen Eigenschaften auf der Seite anzeigen, sonst wird ein Fehler angezeigt.
Das Problem besteht auch, wenn Eigenschaften mit Parken zurückgegeben werden, die else-Anweisung oder Fehlerfunktion ausgeführt wird, sowie Eigenschaften auf der Seite angezeigt werden.
Gibt es eine Möglichkeit, die verschachtelten Versprechen abgeschlossen ist, bevor die Überprüfung, ob mein Array mehr als 0?
Hier ist mein Code:
$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";
});
}
}
Dies wurde behoben. Vielen Dank für Ihre Hilfe auf diesem @ Roamer-1888 – Harry