ANGULAR JS PROMISE使用

Promise是一种模式,以同步操作的流程形式来操作异步事件,避免了层层嵌套,可以链式操作异步事件。

我们知道,在编写javascript异步代码时,callback是最最简单的机制,可是用这种机制的话必须牺牲控制流、异常处理和函数语义化为代价,甚至会让我们掉进出现callback大坑,而promise解决了这个问题。

 

下面实例是angularjs 的promise的实现方式:

<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="assets/angular.min.js"></script>
</head>
<body ng-controller="ctrl">

<script type="text/javascript">

var  app = angular.module("app",[]);
app.controller('ctrl', ['$scope','$q',function($scope,$q){
    
    function okToGreet(name){
        return name === 'Robin Hood';
    }

    function asyncGreet(name) {
        var deferred = $q.defer();

        setTimeout(function() {
            // 因为这个异步函数fn在未来的异步执行,我们把代码包装到 $apply 调用中,一边正确的观察到 model 的改变
            $scope.$apply(function() {
                deferred.notify('About to greet ' + name + '.');

                if (okToGreet(name)) {
                    deferred.resolve('Hello, ' + name + '!');
                } else {
                    deferred.reject('Greeting ' + name + ' is not allowed.');
                }
            });
        }, 1000);

        return deferred.promise;
    }

    var promise = asyncGreet('Robin Hood');
    promise.then(function(greeting) {
        console.info('Success: ' + greeting);
    }, function(reason) {
        console.info('Failed: ' + reason);
    }, function(update) {
        console.info('Got notification: ' + update);
    });
}]);


</script>
</body>
</html>

 

其中我们可以通过defered.notify ,defered.resolve,defered.reject 传递参数给其后的链式操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值