angular js $ http返回true或false

时间:2015-06-30 16:32:53

标签: javascript angularjs http return promise

我在角度服务中有以下代码:

this.login = function(email, password)
{

    var promise =  $http({
        url: 'user/authenticate',
        method: "POST",
        data: { 'email' : email, 'password' : password }
    });

    promise.then(
      function(payload) {
         return true;
        }
      );
}

这是我的主叫代码:

var loginResult = loginService.login(data.email, data.password);
        alert(oginResult);
        if (loginResult)
        {
            $modalInstance.close("");
            $state.go("home");
        }
        else
        {
            $scope.error = "Login not found.";
        }

我试图恢复到调用service.login。然而我所得到的都是未定义的。

任何帮助将不胜感激,谢谢你。

2 个答案:

答案 0 :(得分:0)

您需要更新代码。从服务中返回承诺,并在控制器中的 .then 中完成工作。

服务

this.login = function(email, password)
{

    var promise =  $http({
        url: 'user/authenticate',
        method: "POST",
        data: { 'email' : email, 'password' : password }
    });

    return promise;
}

控制器

loginService.login(data.email, data.password).then(function(loginResult){
        alert(loginResult);
        if (loginResult)
        {
            $modalInstance.close("");
            $state.go("home");
        }
        else
        {
            $scope.error = "Login not found.";
        }


});

答案 1 :(得分:0)

  1. 您需要在SErvice中创建承诺

    this.login = function(email, password)
    {
      // we directly return $http as $http is a promise.
      return  $http({
          url: 'user/authenticate',
          method: "POST",
          data: { 'email' : email, 'password' : password }
      });
    }
    
  2. 将承诺响应管理到您的控制器

       // manage the promise return with .then(function() and the response with the parameter of the function
    
    loginService.login(data.email, data.password).then(function(loginResult){
    
        if (loginResult)
        {
            $modalInstance.close("");
            $state.go("home");
        }
        else
        {
            $scope.error = "Login not found.";
        }
    
    
    });