У меня есть контроллер в моем приложении angularjs, в котором я называю два метода обслуживания.
Когда контроллер запускается, мой второй метод использует значения $ scope, установленные в моем первом методе. Значения $ scope не определены, поскольку я не могу четко определить порядок выполнения здесь.
Почему мой второй метод вызывается до того, как мои значения области $ заданы в первом методе? И как я могу исправить это правильно?
angular.module("Modal")
.controller("MyController",
function($scope, $log, ModalService, AuthService) {
//First method - Calls a WEB API
AuthService.FirstMethod(function (username) {
$scope.username = "myName"; //Is set after SecondMethod is called
$scope.items = "MyItems";
});
//Second method
//$scope values here are undefined when initiating the controller
ModalService.SecondMethod($scope.items, $scope.username, function (selectedItem) {
var test = selectedItem;
});
}
);
Вы можете попробовать следующее:
function wrapUpFirst() {
return $q(function(resolve,reject) {
// Execute this function
AuthService.FirstMethod(function(result) {
resolve(result);
}, function(error) {
// Handle error
reject(error);
});
});
}
Таким образом, это возвращает обещание, которое мы можем использовать ниже, и передать результат второму методу:
wrapUpFirst().then(function(success) {
// Use result for the second
ModalService.SecondMethod(success, otherParams, func(){});
});