Я пытаюсь оценить выражение в операторе if, чтобы вернуть true
или false
. Оценка функции зависит от обещаний $http
, из которых в документации много, поэтому я уверен, что смогу понять это.
Тем не менее, я заметил что-то странное в моей консоли, и, похоже, обратный вызов .success
запускается дважды, поскольку консоль дважды выводит вывод из обратного вызова успеха (то есть the call was a success
записывается дважды)!
Глядя на код, мое понимание было бы, что save()
причины securityCheck.checkLogin()
войти undefined
, если заявление оценить ложь (тем самым войдя function returned false
), а затем обещание вернуться с the call was a success
быть зарегистрированным раз. Почему он регистрируется дважды?
скрипт
angular.module('login', ['security'])
.directive('loginDirective', ['$parse', 'securityCheck', function($parse, securityCheck) {
return {
scope: true,
link: function(scope, element, attrs, form) {
scope.save = function() {
console.log(securityCheck.checkLogin());
//evaluates to undefined, promise not returned yet
if (securityCheck.checkLogin()) {
console.log("function returned true");
} else {
console.log("function returned false");
}
}
}
};
}]);
angular.module('security', [])
.factory('securityCheck', ['$q', '$http', function ($q, $http) {
var security = {
checkLogin: function() {
$http.get('https://api.mongolab.com/api/1/databases/lagrossetete/collections/avengers?apiKey=j0PIJH2HbfakfRo1ELKkX0ShST6_F78A')
.success(function(data, status, headers, config) {
console.log('the call was a success!');
})
.error(function(data, status, headers, config) {
console.log('the call had an error.');
});
}
};
return security;
}]);
HTML
<html ng-app="login">
<body>
<login-directive ng-click="save()">click me</login-directive>
</body>
</html>
plnkr: http://plnkr.co/edit/tM7eHniDRvCLhzAw7Kzo?p=preview
Спасибо!
Неловко. Я не знал, что регистрация его на консоли приведет к ее выполнению. Спасибо за информацию. :-) –
Вы регистрируете результат выполнения метода 'checkLogin()', и метод ничего не возвращает (в нем нет оператора возврата), это он регистрирует 'undefined'. – npe