angular的$q返回一个可链式调用的promise

这篇博客介绍了AngularJS中的$q服务,它是一个Promise/deferred的实现。文章详细阐述了Promise的三种状态以及状态转换的规则。重点讲解了$q.defer()方法,包括如何创建deferred对象,使用deferred.promise的then方法,以及resolve、reject和notify的方法。此外,还提到了all()和when()这两个与Promise处理相关的方法。
摘要由CSDN通过智能技术生成

什么是$q服务? 

$q服务是AngularJS中自己封装实现的一种Promise/deferred实现;


在Promise中,定义了三种状态:等待状态,完成状态,拒绝状态,关于状态有几个规定:
  • 1 状态的变更是不可逆的
  • 2 等待状态可以变成完成或者拒绝

$q.defer()方法

defer()用于创建一个deferred对象,defer.promise用于返回一个promise对象,来定义then方法。then中有三个参数,分别是成功回调、失败回调、状态变更回调。


(angular=>{
    angular.module('myApp')
    .service('myService',['$q','$http',($q,$http)=>{
        return{
            func_one:param=>{
                //业务逻辑
                let a='1';
                
                //实例deferred,返回promise
                let deferred=$q.defer();
                let promise=deferred.promise;
                if(a==='1'){
                    promise.resolve(a);
                    return promise;
                }else{
                    promise.reject("模仿错误信息");//这相当通过 $q.reject构造的rejection 对象来解决
                    return promise;
                }
            },
            func_two:param=>{
                //业务逻辑
                let b='2';
                let deferred=$q.defer();
                let promise=deferred.promise;
                if(b==='2'){
                    promise.resolve(a);
                    return promise;
                }else{
                    return  $q.reject("模仿错误信息");
                }


            }
        }
    }])
    .controller('myController',['$scope','myService',function($scope,myService){


        $scope.func_thr=()=>{
            myService.func_one()
            .then(data=>{
                if(data==='1'){
                    return myService.func_two();
                }
            })
            .then(data=>{
                alert(data);
            })
            .catch(error=>{
                if(error){
                    alert(error);
                }
            });
        }
    }])
})(angular);

  resolve(value):向promise对象异步执行体发送消息告诉他我已经成功完成任务,value即为发送的消息。

   reject(value): 向promise对象异步执行体发送消息告诉他我已经不可能完成这个任务了,value即为发送的消息。

   notify(value): 向promise对象异步执行体发送消息告诉他我现在任务完成的情况,value即为发送的消息。

$q.when();和$q.all();

 all():参数接收为一个promise数组,返回一个新的单一promise对象,当这些promise对象对应defer对象全部解决这个单一promise对象才会解决,当这些promise对象中有一个被reject了,这个单一promise同样的被reject了。

 when():接收第一个参数为一个任意值或者是一个promise对象,其他3个同promise的then方法,返回值为一个promise对象。第一个参数若不是promise对象则直接运行success回调且消息为这个对象,若为promise那么返回的promise其实就是对这个promise类型的参数的一个包装而已,被传入的这个promise对应的defer发送的消息,会被我们when函数返回的promise对象所接收到。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值