我无法理解一些承诺。它们在我的应用程序的某些实例中工作正常,但在某些情况下它们从不工作。
在我的控制器中,我有以下命令:
myFactory.redrawCategories()
.then(myFactory.redrawTasks());
立即调用redrawTasks函数,无需等待redrawCategories完成。
我工厂内的功能如下所示
redrawTasks: function(){
var defer = $q.defer();
db.getAllDocs("task_").then(function(res) {
angular.forEach(res, function(value){
value = value.doc;
tasks[value.category].push(value);
});
angular.forEach(tasks, function(taskArray, cat){
// some code
});
defer.resolve(1);
});
return defer.promise;
},
另一个就像
redrawCategories: function(){
var deferred = $q.defer();
db.getAllDocs("category_").then(function(res) {
var categoryArray = [];
angular.forEach(res, function(value){
categoryArray.push(value.doc);
});
deferred.resolve("done");
});
return deferred.promise;
},
为了更好的概述,删除了一些不重要的代码。
不知道该怎么做。我已经尝试将resolve()函数放在返回的前面,但这也不起作用。
我已经读过,有时候你必须在$ scope中包装。$ apply,在这种情况下很可能是$ rootScope。$在控制器范围之外的工厂中应用但是,这并没有真正改变它,除此之外我还没有真正掌握过什么东西在Angular"之外。正如他们所描述的那样。
我已经阅读了很多例子和教程,但我再也看不到树林了。
任何帮助都会受到很多赞赏。我很坚持这个:/谢谢
答案 0 :(得分:2)
.then
需要一个函数引用。
myFactory.redrawCategories()
.then(myFactory.redrawTasks());
应该是
myFactory.redrawCategories()
.then(myFactory.redrawTasks);
当你拥有()
时,会立即执行该功能,并且无论它返回什么都会传递.then
。
如评论中所述,如果您依赖于this
redrawTasks
,那么
myFactory.redrawCategories()
.then(function() {
return myFactory.redrawTasks();
});
答案 1 :(得分:1)
尝试:
myFactory.redrawCategories()
.then(myFactory.redrawTasks);
你正在调用这个函数。相反,你只想将它传递给函数并进行角度调用。