angularjs $q、$http 处理多个异步请求

在实际业务中经常需要等待几个请求完成后再进行下一步操作。但angularjs中$http不支持同步的请求。

解决方法一:

$http.get(‘url1‘).success(function (d1) {
        $http.get(‘url2‘).success(function (d2) {
            //处理逻辑
        });
    });

解决方法二:

then中的方法会按顺序执行。

var app = angular.module(‘app‘,[]);
app.controller(‘promiseControl‘,function($scope,$q,$http) {
    function getJson(url){
        var deferred = $q.defer();
        $http.get(url)
            .success(function(d){
                d = parseInt(d);
                console.log(d);
                deferred.resolve(d);
            });
        return deferred.promise;
    }

    getJson(‘json1.txt‘).then(function(){
        return getJson(‘json2.txt‘);
    }).then(function(){
        return getJson(‘json1.txt‘);
    }).then(function(){
        return getJson(‘json2.txt‘);
    }).then(function(d){
        console.log(‘end‘);
    });
});

解决方法三:

$q.all方法第一个参数可以是数组(对象)。在第一参数中内容都执行完后就会执行then中方法。第一个参数的方法的所有返回值会以数组(对象)的形式传入。

var app = angular.module(‘app‘,[]);
app.controller(‘promiseControl‘,function($scope,$q,$http) {
    $q.all({first: $http.get(‘json1.txt‘),second: $http.get(‘json2.txt‘)}).then(function(arr){
        console.log(arr);
        angular.forEach(arr,function(d){
            console.log(d);
            console.log(d.data);
        })
    });
});

$q的详细使用方法网上的有很多教程。我也是刚接触。讲不好,不敢乱讲。上面的代码是我按我的理解写的,经过了测试没有问题。

时间: 2024-10-22 18:22:48

angularjs $q、$http 处理多个异步请求的相关文章

学习笔记12JS异步请求

*一般用JS来监听按钮事件,都应该先监听页面OnLoad事件. *Js写在哪里,就会在页面解析到哪里执行. 异步请求:所谓异步请求,就是使用JS来监听按钮点击事件,并且发送请求,等到回复后,再使用JS来进行页面跳转,或动态改变页面.使用场合:当请求是ashx是,都可以使用异步方法,页面就无需刷到ashx的一个空白页面或者不用于展示的页面了. *使用jquery发送异步请求:$("#按钮ID").Click(fuction(){ $.get( "页面URL.ashx"

jQuery基础(Ajax,load(),getJSON(),getScript(),post(),ajax(),同步/异步请求数据)

1.使用load()方法异步请求数据 使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为: load(url,[data],[callback]) 参数url为加载服务器地址,可选项data参数为请求时发送的数据,callback参数为数据请求成功后,执行的回调函数. 2.使用getJSON()方法异步加载JSON格式数据 使用getJSON()方法可以通过Ajax异步请求的方式,获取服务器中的数据,并对获取的数据进行解析,显示在页面中,它的

ajax 异步请求四个步骤

ajax异步请求详解 ajxa定义:异步的JavaScript和xml 1.XMLHttpRequst的出现才有了异步处理 2.创建XmlHttpRequest对象 var request=new XMLHttpRequest(); 注意:如果要兼容IE6以下浏览器则需要编写如下代码 var request; if(window.XMLRequest){ request=new XMLRequestHttpRequest();  //IE7.IE8.360等 }else{ request=new

Ajax异步请求(二)

业精于勤,荒于嬉:行成于思,毁于随. ----致自己 目录: 二.jQuery四种常用的Ajax请求方式简介 1.$.ajax() 2.$.get() 3.$.post() 4.$.getJSON() ==================1.$.ajax()======================== jQuery在异步请求方面封装的较好,直接使用Ajax比较麻烦,jQuery大大简化了我们的使用,不用考虑浏览器之间的差异了. $.ajax()是jQuery底层ajax的实现,$.get()

js方式的异步请求

1 有的企业要求你要会写, 2 *1. 异步请求的get方式 3 代码: 4 //创建一个XmlHttpRequest请求 5 function createXmlHttpRequest(){ 6 //声明一个请求,并是设置为空 7 var xhr=null; 8 try{ 9 //兼容IE浏览器的请求 10 xhr=new ActiveXObject("microsoft.xmlhttp"); 11 }catch(e){ 12 try{ 13 //其他浏览器的请求对象 14 xhr=

让Flask处理异步请求

今天意外在网上看到一篇文章,写到 后端使用gunicorn+flask的方式,刚开始就直接使用flask跑,但是有一次就出现502了,发现由于flask是单进程处理请求的,不像Tornado的异步,同时访问的人数稍微过多,就会出现阻塞的情况,导致nginx出现502的问题 于是开始寻找flask处理异步请求的解决方案 首先 我不了解tornado的异步处理方式,有时间我会去了解一下 其次,我在实验里犯了一个错误,我随手用sleep(100)去做阻塞,造成的结果是整个进程被我挂起了,其实我只需要在

iOS ASI--同步和异步请求

1.添加ASI框架到项目 1>ASI框架在判断网络状态时,依赖于Reachability,可以在苹果的官方文档里找到,也可以ASI的Sample例子里找到. 2>添加ASI所依赖的类库: SystemConfiguration是Reachability所需要的类库 3>如果是ARC项目,还要在Targets-Compile Sources-Compiler Flags里把ASI的.m文件,都置为 -fno-objc-arc 4>最后编译程序,看成功否 2.发起请求 2.1同步请求

IOS之同步请求、异步请求、GET请求、POST请求(整理复习))

1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行 3.GET请求,将参数直接写在访问路径上.操作简单,不过容易被外界看到,安全性不高,地址最多255字节: 4.POST请求,将参数放到body里面.POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获. 1.     同

ajax异步请求

随便写写: 异步请求,相当于只是局部向浏览器发送请求,局部刷新的意思. 请求的方式 有两大类分为get: post. 自己封装的ajax var AjaxHelp = { ///返回创建的异步对象 GetReques: function () { var xlm = new XMLHttpRequest(); return xlm; }, ///异步对象的请求               //请求方式,地址,参数,回调函数 ProcessReques: function (methor, url

异步请求与异步刷新

异步请求 [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { //可以看data里的值 NSLog(@"data = %@",[[NSString alloc] initWithData:data