我正在使用本文进行AngularJS身份验证:https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec#.y7nkgrxqo
在文章中,他们提出了:
.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);
});
};
})
$ scope.login中的.then有两个用逗号分隔的函数---这是什么意思?
答案 0 :(得分:2)
$scope.login
只有一个函数,then()
有两个函数,如
promise.then(function(value) {
// fulfillment
}, function(reason) {
// rejection
});
履行承诺时会调用第一个函数。该函数有一个参数,即履行值。
拒绝承诺时调用第二个函数。这个函数有一个参数,即拒绝原因。
答案 1 :(得分: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);
}
);
答案 2 :(得分:0)
============概念一,作为参数起作用=================
这不是一个Angular功能,它只是简单的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);