码迷,mamicode.com
首页 > 其他好文 > 详细

小谈angualr $q

时间:2016-04-12 01:55:29      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

以一个$()请求为例代码如下

$http({
    method:‘GET‘,
    url:‘../temp.json‘
}).then(function(data) {
        // data为返回的数据对象
        console.log(‘请求成功‘);
    }, function(err) {
        // err为请求失败后返回的错误信息
    console.log(‘请求失败‘);
    }
);            

以上代码使用angualr内置的$http函数发起一个get请求,then方法可以传入两个回掉函数,这个没什么谈的,当然还可以有下面的链式调用

$http({
    method:‘GET‘,
    url:‘../temp.json‘
}).then(function(data) {
        // data为返回的数据对象
        console.log(‘请求成功‘);
    }, function(err) {
        // err为请求失败后返回的错误信息
    console.log(‘请求失败‘);
    }
).then(function(data) {
        // data为返回的数据对象
        console.log(‘请求成功‘);
    }, function(err) {
        // err为请求失败后返回的错误信息
    console.log(‘请求失败‘);
    }
);

需要注意的是当请求失败后会在第一个then的失败回掉函数中执行代码,之后程序可以顺利地执行下面的then的成功的回掉函数,如果第一个then未提供失败的回掉函数,则程序会调用第二个then的失败的回掉函数。

结合$q往往有下面的代码使用

$http({
    method:‘GET‘,
    url:‘../temp.json‘
}).then(function(data) {
        var defer = $q.defer();
    console.log(‘chneggongle‘);
    var a = true;
    if(!a){
            defer.reject({
                type: -1,
                data: data
           });}else {
                defer.resolve(data.data);
         }
         return defer.promise;
    }, function(err) {
        // err为请求失败后返回的错误信息
        console.log(‘请求失败‘);
    }
).then(function(data) {
        // data为返回的数据对象
        console.log(‘请求成功‘);
    }, function(err) {
        // err为请求失败后返回的错误信息
    console.log(‘请求失败‘);
    }
);    

上述代码可以简单理解为当请求成功是我们执行第一个then的成功的回调,里面使用了$q.defer(),试想,如果我们有这样的一个需求,即虽然请求成功发送了,数据也返回了,但是返回的数据并不符合我们的需求,于是我想此时程序可以调用失败的回调,于是可以使用$q.defer()返回的对象,当我们判断出返回的数据不符合要求时使用$q.defer.reject(),这是什么意思呢,注意我们在第一个then成功的回调的最后返回了一个$q.defer.promise,意味着如果我们的请求时成功的,那将由这个返回的$q.defer.promise对象去调用第二个then,那具体调用第二个then的成功的回调函数还是失败的呢,这里就可以简单地认为$q.defer.reject()调用了第二个then的失败的回调,再看第一个then成功的回调函数里还有一句是$q.defer.resolve(),这句可以理解为调用第二个then的成功的回调函数。

  这样通过第一个then中的$q,我们就可以根据js逻辑的判断,去灵活地执行下一个then中成功与失败的回调了,当然上述过程的描述可能有概念上的错误,此博客重点仅用以记录$q配合$http时程序的执行过程,方便以后回顾。不足之处欢迎指正

小谈angualr $q

标签:

原文地址:http://www.cnblogs.com/Liujunyan/p/5380853.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!