如何处理angularJS中$ http.post的异步返回?

用户名

在这里遇到了一个简单的基本登录问题。我的AuthService工厂内部包含以下代码(2个相关函数和一个本地变量):

  var username = '';

 function login(uname, upwd, utype) {

// create a new instance of deferred
var deferred = $q.defer();


$http({
        method: 'POST',
        url: '/root',
        headers: {
            'Content-Type': 'application/json'
        },
        data: {
            username: uname,
            password: upwd,
            type: utype
        }

    }).success(function(data, status, headers, config) {
        if (status === 200) {
            user = true;
            username = data.username;
            usertype = data.usertype;
            deferred.resolve();
        } else {
            user = false;
            deferred.reject();
        }

    })
    .error(function(data, status, headers, config) {
        user = false;
        deferred.reject();
    });

  // return promise object
  return deferred.promise;

}

function getusername() {

      return username;
    }

我的控制器如下所示:

angular.module('smApp').controller('rootloginController', ['$scope', '$location', 'notificationFactory', 'AuthService',
function($scope, $location, notificationFactory, AuthService) {

    $scope.submit = function() {
        AuthService.login($scope.rEmail, $scope.rootPassword, 'root')
        if (AuthService.isLoggedIn()) {
            $location.url('/dashboard');
            notificationFactory.success('Logged in as ' + rootEmail);
        } else {
            //ngNotifier.notifyError($scope.rEmail);

            notificationFactory.error('Invalid username & password combination');
        }
    };
    };
    }]);

我在login()之后在if语句中调用我的getusername(),由于login有$ http发布,它是异步的,我认为我在这里碰壁。

因此,我的主要问题是,第一次单击总是给我错误消息,第二次单击使我登录。我假设这与承诺没有立即兑现并花费一些时间来执行有关。我想知道是否还有这个?我真的没有等待等待执行任何其他代码,因为这是一个登录页面,并且使用超时似乎不是执行此操作的正确方法。

安东·马秋尔科夫(Anton Matyulkov)

在这种情况下,您需要使用Promise API。通过$http服务进行的服务器调用返回一个Promise,该Prom允许绑定.success.error方法。

.then方法可以被用作用于两个的简写.success.error它接受两种分别在成功和错误情况下执行的功能。在这些函数中返回promise可以将调用链接到服务器。

在大多数情况下,这足够了:

// In service 
login: function () {
    return $http.post('your:url').then( // `then` here is optional, but possible
        function () {}, // update service values without having to involve the controller (and/or transform the response object)
        function () {}  // throw error log mesages
    )
}

// In controller
$scope.submit = function () {
    AuthService.login().then(
        function () {
            // success logic: redirect, assign scope variables, etc
        },
        function () {
            // error logic: allow retry
        }
    );
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在AngularJS中处理异步HTTP调用

来自分类Dev

Android-如何处理异步Http崩溃

来自分类Dev

如何处理angularjs和$ http中的字符串素数?

来自分类Dev

如何处理 API 服务中的 HTTP 错误并仅在成功的情况下通过 Observable 返回响应?

来自分类Dev

从服务到组件的异步数据-(从 http POST 返回数据)

来自分类Dev

如何处理组件中的异步输入?

来自分类Dev

异步如何处理Javascript中的变量?

来自分类Dev

Swift中的异步线程-如何处理?

来自分类Dev

异步如何处理Javascript中的变量?

来自分类Dev

再处理中如何处理403 HTTP错误?

来自分类Dev

处理$ http AngularJS返回数据

来自分类Dev

AngularJS $ http.post()返回404

来自分类Dev

AngularJS $ http.post返回状态0

来自分类Dev

如何将对AngularJS $ http POST的响应返回到Sinatra?

来自分类Dev

如何处理Twisted中的POST请求?

来自分类Dev

如何处理logstash中的http发布文件-逐行?

来自分类Dev

如何处理Ruby Net / HTTP中的连接超时错误?

来自分类Dev

在猫鼬查询返回集合之前,应用程序应如何处理http获取响应?

来自分类Dev

Clojure Immutant 2服务器Undertow;如何处理http POST?

来自分类Dev

如何处理递归返回异步函数

来自分类Dev

如何处理异步循环?

来自分类Dev

AngularJS中的$ http.post

来自分类Dev

如何处理异步块Java中的异常

来自分类Dev

颤振如何处理异步/等待中的错误

来自分类Dev

Firebase中如何处理Android的异步运行

来自分类Dev

ForEach() 方法中的异步 lambda 是如何处理的?

来自分类Dev

如何处理 lambda nodejs 中的异步调用

来自分类Dev

C#中如何处理多个异步方法调用

来自分类Dev

AngularJS $ http.post返回一个对象

Related 相关文章

热门标签

归档