我有这个HTML代码
<body ng-app="myModule">
<div ng-controller="myController">{{text}}</div>
</body>
这个js代码
var myModule = angular.module('myModule',[]);
myModule.controller('myController', ['$scope', 'Database', function($scope, Database) {
Database.first()
.then($scope.text = 'first')
.then(Database.second())
.then($scope.text = 'second')
.then(Database.third())
.then($scope.text = 'third');
}]);
myModule.factory('Database', ['$window', '$q', function($window, $q) {
return {
first: function() {
var deferred = $q.defer();
setTimeout(function() {deferred.resolve();alert('ei')},4000);
return deferred.promise;
},
second: function() {
var deferred = $q.defer();
setTimeout(function() {deferred.resolve()},4000);
return deferred.promise;
},
third: function() {
var deferred = $q.defer();
setTimeout(function() {deferred.resolve()},4000);
return deferred.promise;
},
}
}]);
(在此处http://jsfiddle.net/C5gJr/44/)
然后我想知道为什么延迟解决而不等我问的时间。我正在使用这个结构,以便在另一个完成之前不启动它,它就像这个一样工作(这里使用setTimeout)。
另一个(次要)问题
.then($scope.text = 'first')
.then(Database.second())
为什么当我只填充一个变量时,.then函数仍然有效?
提前致谢:)
杰拉德
答案 0 :(得分:3)
您的错误是您使用then
错误。它应该是:
Database.first()
.then(function() {
$scope.text = 'first';
})
.then(function() {
return Database.second();
})
.then(function() {
$scope.text = 'second'
})
.then(function() {
return Database.third()
})
.then(function() {
$scope.text = 'third'
});
再一次。这个
.then($scope.text = 'first')
不正确。 then
希望您传递一个函数。所以它应该是:
.then(function() {
$scope.text = 'first'
})