Ich habe den folgenden Code in meinem Javascript-Controller. Die Funktionen funktionieren, wenn sie unabhängig und asynchron aus der Sicht aufgerufen werden. Allerdings möchte ich sie synchron auf Seite laden nennen, wie die Rückkehr Wert aus der ersten Funktion in dem Aufruf für die zweite FunktionAngular Promise läuft nicht synchron
$scope.function1= function() {
$http({
url: '/Class/method1/',
method: 'GET'
}).success(function (data) {
$scope.mygrid= data.data;
$scope.myvalue= $scope.mygrid[0];
});
};
$scope.function2= function() {
$http({
url: '/class/method2/',
method: 'POST',
params: { myValue: $scope.myvalue }
}).success(function (data) {
$scope.myValue2 = data.data;
});
};
var initialize = function() {
var defer = $q.defer();
defer.promise
.then(function() {
$scope.function1();
})
.then(function() {
$scope.function2();
})
defer.resolve();
};
initialize();
Auf dem zweiten Aufruf $ scope.myvalue verwendet wird, ist null. Daten wurden von Funktion eins zurückgegeben, so dass ich nur daran denken kann, dass Funktion2 zu früh aufgerufen wird. Irgendwelche Zeiger? :-)
Versprechen nie synchron sind. [Versprechen sind keine Magie] (http://stackoverflow.com/a/22562045/1048572). Sie müssen sie von den 'then'-Callbacks und von Ihrem Scope' functionN' zurückgeben, sonst können sie nicht wissen, dass Sie auf etwas warten wollen. – Bergi
Wenn Sie möchten, dass function2 nach function1 ausgeführt wird, sollte es bei Erfolg von function 1 oder woanders aufgerufen werden, nachdem function1 die erwarteten Daten zurückgegeben hat. –