【发布时间】:2014-06-19 17:26:36
【问题描述】:
我无法理解某些承诺。它们在我的应用程序的某些实例中运行良好,但在某些情况下它们根本无法运行。
在我的控制器中,我有以下命令:
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() 函数放在 return 前面,但这也不起作用。
我读到有时您必须将内容包装在 $scope.$apply 中,在这种情况下很可能是 $rootScope.$apply,因为它位于控制器范围之外的工厂中,但事实并非如此也真的要改变它,除此之外,我还没有真正掌握他们所描述的“Angular 之外”的东西。
我已经阅读了很多示例和教程,但我不再只见树木不见森林。
任何帮助将不胜感激。我很坚持这个:/谢谢
【问题讨论】:
-
myFactory.redrawTasks()-- 立即执行并将结果作为回调传递,而myFactory.redrawTasks不调用该函数,而是将其引用作为回调传递。
标签: javascript angularjs promise