2015-12-23 3 views
1

Я переживающих аутентификации AngularJS используя эту статью: https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec#.y7nkgrxqoфункции, разделенных запятыми в AngularJS

В статье, они воспитывают:

.controller('LoginController', function ($scope, $rootScope, AUTH_EVENTS, AuthService) { 
    $scope.credentials = { 
    username: '', 
    password: '' 
    }; 
    $scope.login = function (credentials) { 
    AuthService.login(credentials).then(function (user) { 
     $rootScope.$broadcast(AUTH_EVENTS.loginSuccess); 
     $scope.setCurrentUser(user); 
    }, function() { 
     $rootScope.$broadcast(AUTH_EVENTS.loginFailed); 
    }); 
    }; 
}) 

.then в $ scope.login имеет два функции, разделенные запятой - что это значит?

+0

Обновлено, чтобы отразить ваш комментарий – user2476265

ответ

2

$scope.login имеет только одну функцию, then() имеет две функции, как в

promise.then(function(value) { 
    // fulfillment 
    }, function(reason) { 
    // rejection 
}); 

Первая функция вызывается, когда обещание выполнено. Эта функция имеет один аргумент, значение выполнения.

Вторая функция называется, когда обещание отклонено. Эта функция имеет один аргумент, причина отклонения.

Promise.then()

0

Если вы читали внимательно, то можно увидеть, что $scope.login имеет только одну функцию. Но обратный вызов Promise.then для входа имеет 2, один для успеха, один для отказа. Первый будет вызываться, если логин завершился успешно, второй, если login не удалось.

AuthService 
    .login(credentials) 
    .then(
     // 1st callback (success) 
     function (user) { 
      // Login succeeded 
      $rootScope.$broadcast(AUTH_EVENTS.loginSuccess); 
      $scope.setCurrentUser(user); 
     }, 
     // 2nd callback (failure) 
     function() { 
      // Login failed 
      $rootScope.$broadcast(AUTH_EVENTS.loginFailed); 
     } 
    ); 
+0

Что вы использовали для форматирования кода? – user2476265

+0

Мои пальцы :-) Или webstorm. – Ludo

0

============ Концепция одна функция в качестве аргументов =================

Это не Угловое функция, это просто javascript. Javascript примет что-либо как аргумент функции, включая другие функции. Это быстрый способ разбить его:

function ryu(){ 
    console.log('hadouken!'); 
} 
function ken(){ 
    console.log('shoryuken!'); 
} 
function fight(x,y){ 
    x(); 
    y(); 
} 

Это

fight(ryu,ken); 

так же, как:

fight(function(){ 
    console.log('hadouken!'); 
},function(){ 
    console.log('shoryuken!'); 
}); 

============ Концепция вторая, обещания =================

Обещание, о котором все говорят в других ответах, - всего лишь плюс. Обещания - это причудливый способ «сделать что-то после чего-то». Быстрый и грязный способ выполнить свое обещание:

Скажем, перед началом боя парень должен его объявить.

function announce(fight,a,b){ 
    console.log('3,2,1 fight!'); 
    //fight will happen after 3 seconds 
    setTimeout(function(){ 
     fight(a,b) 
    },3000); 
} 

//then you run it 
annount(fight,ryu,ken); 
Смежные вопросы