AngularJS 运用 Promise

如安在 AngularJS 中运用 Promise

要在 AngularJS 中运用 Promise, 要运用 AngularJS 的内置效劳 $q

我们能够先运用 $qdefer() 要领建立一个 deferred 对象, 然后经由历程 deferred 对象的 promise 属性, 将这个对象变成一个 promise 对象; 这个 deferred 对象还供应了三个要领, 分别是 resolve(), reject(), notify()

HTML 代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <title>demo</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>
    <div ng-app="myApp">
        <div ng-controller="myController">
            <label for="flag">胜利
      <input type="checkbox" name="flag" id="flag" ng-model="flag">
    </label>
            <hr>
            <button ng-click="handle()">点击我</button>
        </div>
    </div>
    <script src="js/angular.js">
    </script>
    <script src="js/promise.js"></script>
</body>

</html>

JS 代码:

angular.module('myApp', [])
    .controller('myController', ['$scope', '$q', function($scope, $q) {
        $scope.flag = true
        $scope.handle = function() {
            // 建立一个 deferred 对象
            var deferred = $q.defer()
            // 建立一个 promise 对象
            var promise = deferred.promise

            promise.then(function(result) {
                alert('Success: ' + result)
            }, function(error) {
                alert('Fail: ' + error)
            })

            if ($scope.flag) {
                deferred.resolve('you are lucky!')
            } else {
                deferred.reject('sorry, it lost!')
            }
        }
    }])

$qdefer() 要领建立的对象具有哪些要领

  • resolve(value): 用来实行 deferred promise, value 能够为字符串, 对象等。

  • reject(value): 用来谢绝 deferred promise, value 能够为字符串, 对象等。

  • notify(value): 猎取 deferred promise 的实行状况, 然后运用这个函数来通报它。

  • then(successFunc, errorFunc, notifyFunc): 不管 promise 是胜利了照样失利了, 当效果可用以后, then 都邑马上异步挪用 successFunc, 或许 errorFunc, 在 promise 被实行或许谢绝之前, notifyFunc 能够会被挪用0 到 屡次, 以供应历程状况的提醒。

  • catch(errorFunc)

  • finally(callback)

    原文作者:无名小子
    原文地址: https://segmentfault.com/a/1190000008633755
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞