如何等待工厂功能完成然后在Angular中处理输出?

时间:2015-10-17 21:22:41

标签: javascript angularjs wait q angular-promise

我的工厂中有一个函数需要一秒钟来执行,我希望调用函数等到输出在console.log结果之前完成。当我运行getCases函数时,我没有得到输出,直到我第二次点击它。我想我错误地使用了我的承诺。

app.factory('cases', function ($q) {
    return {       
        getCases: function() {
            var defer = $q.defer();

            setTimeout(function(){
                 output = 'aaaa';
                 defer.resolve(output);
            },1000);

            return defer.promise;
        }
    };
});


function CaseloadCtrl($scope, cases){
    $scope.master = {};
    $scope.activePath = null;

    $scope.getCases = function(){
        cases.getCases().then(function(data) {
            console.log(data);
        });
    };

}

按钮

<button ng-click="getCases()">load cases</button>

1 个答案:

答案 0 :(得分:-1)

编辑:

新小提琴

http://jsfiddle.net/chrislewispac/f18taw28/1/

您的版本结果相同。

http://jsfiddle.net/chrislewispac/f18taw28/2/

代码:

 <div ng-app='myApp' ng-controller="MyCtrl">
<button ng-click="runFunc()">Run Func</button>
 </div> 

var myApp = angular.module('myApp',[]);

myApp.factory("cases", ['$q', '$timeout', function ($q, $timeout) {
    return {
        getCases: function () {
         var defer = $q.defer();

        setTimeout(function(){
             output = 'aaaa';
             defer.resolve(output);
        },500);

        return defer.promise;
        }
    };
}]);

myApp.controller('MyCtrl', function($scope, $q, cases) {
  $scope.runFunc = function(){
      $q.when(cases.getCases()).then(function (result) {
      console.log(result);
   });
  };
});