【问题标题】:Functions separated by Commas in AngularJSAngularJS中用逗号分隔的函数
【发布时间】:2015-12-23 17:21:45
【问题描述】:

我正在使用这篇文章进行 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 有两个用逗号分隔的函数 --- 这是什么意思?

【问题讨论】:

  • 更新以反映您的评论

标签: javascript angularjs


【解决方案1】:

$scope.login只有一个功能,then()有两个功能,如

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

第一个函数在 promise 完成时被调用。此函数有一个参数,即履行值。

第二个函数在 promise 被拒绝时被调用。此函数有一个参数,即拒绝原因。

Promise.then()

【讨论】:

    【解决方案2】:

    如果你仔细阅读,你会发现$scope.login只有一个功能。但是登录的Promise.then 回调有2个,1个成功,1个失败。如果登录成功,将调用第一个,如果 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);
            }
        );
    

    【讨论】:

    • 我的手指 :-) 或者 webstorm。
    【解决方案3】:

    ============概念一,函数作为参数=================

    这不是 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!');
    });
    

    ============概念二,承诺=================

    每个人在其他答案中都在谈论的承诺只是一个加号。 Promise 是一种“在某事之后做某事”的奇特方式。兑现承诺的一种快速而肮脏的方式是:

    假设在战斗发生之前,一个人必须宣布它。

    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);
    

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2012-07-15
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多