angularjs中deferred notify用法
deferred对象暴露了三个方法,以及一个可以用于处理promise的promise属性。
resolve(value)
resolve函数用这个值来执行deferred promise。
deferred.resolve({name: "Ari", username: "@auser"});
reject(reason)
这个方法用一个原因来拒绝deferred promise。它等同于使用一个“拒绝”来执行一个promise。
deferred.reject("Can't update user");
// 等同于
deferred.resolve($q.reject("Can't update user"));
notify(value)
这个方法用promise的执行状态来进行响应。例如,如果我们要从promise返回一个状态,可以使用notify()函数来传送它。假设我们想要从一个promise创建多个长时间运行的请求。可以调用notify函数发回一个过程通知:
MyApp.factory('GithubService', function ($q, $http) { // 从仓库获取事件 var getEventsFromRepo = function () { // 任务 } var service = { makeMultipleRequests: function (repos) { var d = $q.defer(), percentComplete = 0, output = []; for (var i = 0; i < repos.length; i++) { output.push(getEventsFromRepo(repos[i])); percentComplete = (i + 1) / repos.length * 100; d.notify(percentComplete);//每次获取和处理一个仓库时,发送一个过程通知 } d.resolve(output); return d.promise; } } return service; });
有了GithubService对象上的这个makeMultipleRequests()函数,每次获取和处理一个仓库时,都会收到一个过程通知。可以在我们对promise的使用中用到这个通知,在用promise时加上第三个函数调用。例如:
MyApp.controller('HomeController', function ($scope, GithubService) { GithubService.makeMultipleRequests([ 'auser/beehive', 'angular/angular.js' ]) .then(function (result) { // 处理结果 }, function (err) { // 发生错误了 }, function (percentComplete) { $scope.progress = percentComplete;//调用通知 }); });
then(successFn, errFn, notifyFn)
then()方法总是返回一个新的promise,可以通过successFn或者errFn这样的返回值执行或者被拒绝。它也能通过notifyFn提供通知

浙公网安备 33010602011771号