我的工厂中有一个函数需要一秒钟来执行,我希望调用函数等到输出在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>
答案 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);
});
};
});