Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度js中的异步调用_Javascript_Angularjs - Fatal编程技术网

Javascript 角度js中的异步调用

Javascript 角度js中的异步调用,javascript,angularjs,Javascript,Angularjs,大家好,我是angular js的新手,这里我想从服务器获取json到控制器,这样我就可以处理数据了,但是这里发生的是第一个警报-11被调用,然后警报2被调用,最后警报1被调用,我读到了关于promise的内容,所以我尝试了它,但仍然不起作用,我希望它一个接一个的发生,请帮助我。提前谢谢 sampleApp.controller('firstpage',函数($scope,$q,$http,$templateCache,onlinedata,offlinedata){ $scope.messag

大家好,我是angular js的新手,这里我想从服务器获取json到控制器,这样我就可以处理数据了,但是这里发生的是第一个警报-11被调用,然后警报2被调用,最后警报1被调用,我读到了关于promise的内容,所以我尝试了它,但仍然不起作用,我希望它一个接一个的发生,请帮助我。提前谢谢

sampleApp.controller('firstpage',函数($scope,$q,$http,$templateCache,onlinedata,offlinedata){
$scope.message='这是添加新订单屏幕';
var defer=$q.defer();
defer.promise.then(函数(){
$scope.method='POST';
$scope.url='1http://ncrts.com/ncrtssales_compadmin/webservices/user_login';
$scope.fetch=函数(){
$scope.code=null;
$scope.response=null;
警报($scope.response+11)//alert11
$http({
方法:$scope.method,
url:$scope.url,
缓存:$templateCache
}).
成功(功能(数据、状态){
$scope.status=状态;
$scope.message=数据;
警报($scope.message+1)//警报1
}).
错误(功能(数据、状态){
$scope.data=data | |“请求失败”;
$scope.status=状态;
});
};
$scope.fetch();
})
.然后(函数(){
警报($scope.message+2);//警报2
})
defer.resolve();
//警报($scope.remote)
});

我对您代码的格式感到非常困惑。它可以帮助您在服务中编写异步调用,然后将服务注入控制器。记住这一点,以下是我在AngularJS中学到的关于异步调用和承诺的一些一般建议:

  • 您的服务应该首先返回延迟承诺。这个承诺 然后应在异步调用的
    success()
    上解决
  • $http()
    返回之后,但在
    success()
    返回之前,您有一个 未解决的承诺。如果您有要在 承诺已解决,您需要使用
    then()
    指示您 完成后,要在
    then()
    块中执行代码吗 收到数据(并解决了承诺)
  • 不为此使用
    then()
    这种情况将导致错误,因为您将尝试访问 还不存在的数据

从您的代码中可以看出,您已经意识到了所需的必要编码策略,但是将异步调用隔离到服务中总是有帮助的,这样框架就可以让您的生活更轻松。祝您好运。

您必须使用resolve和reject函数来处理带有承诺的响应。您可以在中找到有关承诺的更多信息。我对你的代码做了一些修改,向你展示了如何实现你想要的

sampleApp.controller('firstpage', function ($scope, $q, $http, $templateCache, onlinedata, offlinedata) {
$scope.message = 'This is Add new order screen';
var defer = $q.defer();

    $scope.method = 'POST';
    $scope.url = 'http://ncrts.com/ncrtssales_compadmin/webservices/user_login';

    $scope.fetch = function () {
        $scope.code = null;
        $scope.response = null;
        alert($scope.response + 11) //alert11

        var defer = $q.defer();
        $http({
            method: $scope.method,
            url: $scope.url,
            cache: $templateCache
        }).
        success(function (data, status) {
            //$scope.status = status;
            $scope.message = data;
            alert($scope.message + 1) //alert1
            defer.resolve({
               status: status,
               message: data
            });                
        }).
        error(function (data, status) {
            var data = data || "Request failed";
            //$scope.status = status;
            defer.reject({
               status: status,
               message: data
            });                             
        });
        return defer.promise;
    };

    $scope.fetch().then(function (data) {
        alert('Status: ' + data.status);
        alert('Message: ' + data.message);            
    });
});

抱歉,警报1,编辑了它实际上我想让ajax调用单独服务,但是在这里发布我把它弄混了,谢谢你的指导方针非常有用谢谢