将2个函数传递给'.then()'是什么意思? (Angular.js)

时间:2016-04-22 00:12:02

标签: javascript angularjs angular-promise

我正在阅读有关angular.js的一些教程并且遇到了这个表达式:

.then(handleRequest, handleRequest)

我想知道将两个相同的函数传递给.then()?

是什么意思

以下是更多背景信息:

function MainCtrl(user, auth) {
  var self = this;

  function handleRequest(res) {
    var token = res.data ? res.data.token : null;
    if(token) { console.log('JWT:', token); }
    self.message = res.data.message;
  }

  self.login = function() {
    user.login(self.username, self.password)
      .then(handleRequest, handleRequest)
  }

  ...

}

angular.module('app', [])
.controller('Main', MainCtrl)
....
})();

原始教程可以在这里找到:https://thinkster.io/angularjs-jwt-auth

2 个答案:

答案 0 :(得分:3)

then方法定义为:

  

promise.then(onFulfilled, onRejected)

履行承诺时会调用第一个参数。

拒绝承诺时会调用第二个参数。

将相同的回调函数作为两个参数传递意味着作者希望使用相同的函数来处理承诺的履行或拒绝。

阅读the complete spec了解详情。

答案 1 :(得分:1)

第一个用于successCallback,第二个用于errorCallback。所以

// Simple GET request example:
$http({
 method: 'GET',
url: '/someUrl'
}).then(function successCallback(response) {
// this callback will be called asynchronously
// when the response is available
}, function errorCallback(response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});

承诺有点复杂的模式来理解。对我来说最好的资源是

Promises in AngularJS, Explained as a Cartoon