javascript、对象、传递函数作为参数和参数-角度、jquery概念基本误解

javascript、对象、传递函数作为参数和参数-角度、jquery概念基本误解,javascript,jquery,oop,object,angularjs,Javascript,Jquery,Oop,Object,Angularjs,我试图理解我真正在做什么,因为我觉得我缺少一些东西。你能给我指个地方或确认我的错误/理解吗 request.then(function(response) { updateCurrentUser(response.data.data); currentUser.isAuthenticated(); }); 基本上是这样吗 request = { then : function (foo){ foo("first") }

我试图理解我真正在做什么,因为我觉得我缺少一些东西。你能给我指个地方或确认我的错误/理解吗

request.then(function(response) {
        updateCurrentUser(response.data.data);
        currentUser.isAuthenticated();
      });
基本上是这样吗

request = {
    then : function (foo){
        foo("first")
    } }

request.then(function (response) { console.log(response) ; });
如果您看到完整的代码#35和#63

指令:

    AuthenticationService.login($scope.user.email, $scope.user.password).then(function(loggedIn) {
      if ( !loggedIn ) {
        $scope.authError = "Login failed.  Please check your credentials and try again.";
      }
    });
AuthenticationService作为工厂:

login: function(email, password) {
  var request = $http.post('http://', {email: email, password: password});
  return request.then(function(response) {
    updateCurrentUser(response.data.data);
    return currentUser.isAuthenticated();
  });

},
我不明白的是,为什么loggedIn变量的值等于what语句返回的currentUser.isAuthenticated();返回且不等于原件的then(功能(响应),因为我正在从AuthenticationService返回承诺。 对于上述示例,如何实现这一点


谢谢。

我认为概念上的问题是因为您忽略了return语句。
AuthenticationService.login
实际上是一个带有预定义请求的闭包,因此您可以想象
login
被其返回值
请求所取代。然后(函数(响应){…
。然后您可以简单地推断整个代码行是:

AuthenticationService.login($scope.user.email, $scope.user.password).then(
function(response)
{
    updateCurrentUser(response.data.data);
    return currentUser.isAuthenticated();
}).then(
function(loggedIn)
{
  ...

通过这种方式,您可能会看到响应的结果应该作为登录检查下一步的输入。

不清楚您在这里询问的是什么。我将尝试重新格式化,谢谢您是否询问如何将变量
foo
传递到
。然后(函数(foo){
?对于此类功能,您需要更高级的函数:.hmm..not.在请求中。然后(函数(响应)…在响应中让我们说值“a”。然后我返回该请求并再次执行请求。然后(函数(loggedIn)和现在在loggedIn中有值“B”。。关于当前用户。isAuthenticated()返回…为什么?见鬼,也许是吧..但我还是不这么理解。你能更详细一点吗?见鬼,是的,我明白了:
,因为调用承诺的api返回一个新的派生承诺,很容易创建一个承诺链:
和以下工作:
$http.get('http://')。然后(函数(greet){console.log(greet);返回“something other”})。然后(function(greet2){console.log(greet2);});