如安在 AngularJS 中运用 Promise
要在 AngularJS
中运用 Promise
, 要运用 AngularJS
的内置效劳 $q
。
我们能够先运用 $q
的 defer()
要领建立一个 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!')
}
}
}])
$q
的 defer()
要领建立的对象具有哪些要领
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)