Javascript AngularJS承诺don';不能按顺序执行
我无法理解一些承诺。在我的应用程序的某些实例中,它们工作得很好,但在某些情况下,它们根本不工作 在控制器中,我有以下命令:Javascript AngularJS承诺don';不能按顺序执行,javascript,angularjs,promise,Javascript,Angularjs,Promise,我无法理解一些承诺。在我的应用程序的某些实例中,它们工作得很好,但在某些情况下,它们根本不工作 在控制器中,我有以下命令: myFactory.redrawCategories() .then(myFactory.redrawTasks()); 重画任务函数会立即调用,而无需等待重画类别完成 我工厂里的功能是这样的 redrawTasks: function(){ var defer = $q.defer(); db.getAllDo
myFactory.redrawCategories()
.then(myFactory.redrawTasks());
重画任务函数会立即调用,而无需等待重画类别完成
我工厂里的功能是这样的
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;
},
一些unimortant代码已被删除,以便更好地进行概述
真的不知道怎么做。我尝试将resolve()函数放在返回的前面,但这也不起作用
我读到过,有时你必须把东西包装在$scope中。$apply,在这种情况下很可能是$rootScope。$apply,因为它在工厂中,在控制器范围之外,但这也不会真正改变它,而且我还没有真正理解什么东西是他们描述的“角度之外”的
我读过很多例子和教程,但我再也看不到森林中的树木了
任何帮助都将不胜感激。我被这个难住了:/Thank试试:
myFactory.redrawCategories()
.then(myFactory.redrawTasks);
您正在调用函数。相反,您只需要将其传递给函数,然后让angular调用它。尝试:
myFactory.redrawCategories()
.then(myFactory.redrawTasks);
您正在调用函数。相反,您只需要将其传递给函数,然后让angular调用它。尝试:
myFactory.redrawCategories()
.then(myFactory.redrawTasks);
您正在调用函数。相反,您只需要将其传递给函数,然后让angular调用它。尝试:
myFactory.redrawCategories()
.then(myFactory.redrawTasks);
您正在调用函数。相反,您只需要将其传递给then函数并让angular调用它。
。然后,
需要函数引用
myFactory.redrawCategories()
.then(myFactory.redrawTasks());
应该是
myFactory.redrawCategories()
.then(myFactory.redrawTasks);
当您拥有()
时,该函数立即执行。然后传递它返回的任何内容
如评论中所述,如果您在重画任务
中依赖此
,您会这样做
myFactory.redrawCategories()
.then(function() {
return myFactory.redrawTasks();
});
。然后
需要函数引用
myFactory.redrawCategories()
.then(myFactory.redrawTasks());
应该是
myFactory.redrawCategories()
.then(myFactory.redrawTasks);
当您拥有()
时,该函数立即执行。然后传递它返回的任何内容
如评论中所述,如果您在重画任务
中依赖此
,您会这样做
myFactory.redrawCategories()
.then(function() {
return myFactory.redrawTasks();
});
。然后
需要函数引用
myFactory.redrawCategories()
.then(myFactory.redrawTasks());
应该是
myFactory.redrawCategories()
.then(myFactory.redrawTasks);
当您拥有()
时,该函数立即执行。然后传递它返回的任何内容
如评论中所述,如果您在重画任务
中依赖此
,您会这样做
myFactory.redrawCategories()
.then(function() {
return myFactory.redrawTasks();
});
。然后
需要函数引用
myFactory.redrawCategories()
.then(myFactory.redrawTasks());
应该是
myFactory.redrawCategories()
.then(myFactory.redrawTasks);
当您拥有()
时,该函数立即执行。然后传递它返回的任何内容
如评论中所述,如果您在重画任务
中依赖此
,您会这样做
myFactory.redrawCategories()
.then(function() {
return myFactory.redrawTasks();
});
myFactory.redrawTasks()
--立即执行并将结果作为回调传递,而myFactory.redrawTasks
不调用函数,而是将其引用作为回调传递。myFactory.redrawTasks()
--立即执行并将结果作为回调传递,而myFactory.redrawTasks
不调用函数,而是将其引用作为回调传递。myFactory.redrawTasks()
--立即执行并将结果作为回调传递,而myFactory.redrawTasks
不调用函数,而是将其引用作为回调传递。myFactory.redrawTasks()
--立即执行并将结果作为回调传递,而myFactory.redrawTasks
不调用该函数,而是将其引用作为回调传递。天哪,我真不敢相信它这么简单,我从来没有看到过。非常感谢您快速简单的修复。保存日期:)请注意,如果重画任务
使用此
好点,则此操作将失败。我想您可以通过执行来解决这个问题。然后(function(){myFactory.redrawTasks()})
?我从来没有遇到过javascript中的这个的问题,所以我从来没有真正花过任何精力去理解它是如何工作的。第一行中的解决方案和下面的断言都是正确的——特别是在浏览器javascript生态系统中,人们不喜欢这样。在NodeJS中,这其实很常见。谢谢,我会在答案中加上这一点。天哪,我真不敢相信它这么简单,我从来没见过。非常感谢您快速简单的修复。保存日期:)请注意,如果重画任务
使用此
好点,则此操作将失败。我想您可以通过执行来解决这个问题。然后(function(){myFactory.redrawTasks()})
?我从来没有遇到过javascript中的这个的问题,所以我从来没有真正花过任何精力去理解它是如何工作的。第一行中的解决方案和下面的断言都是正确的——特别是在浏览器javascript生态系统中,人们不喜欢这样。在NodeJS中,这其实很常见。谢谢,我会在答案中加上这一点。天哪,我真不敢相信它这么简单,我从来没见过。非常感谢您快速简单的修复。保存日期:)请注意,如果重画任务
使用此
好点,则此操作将失败。我想您可以通过执行来解决这个问题。然后(function(){myFactory.redrawTasks()})
?我从来没有遇到过javascript中的这个的问题,所以我从来没有真正花过任何精力去理解它是如何工作的。第一行中的解决方案和下面的断言都是正确的——特别是在浏览器javascript生态系统中,人们不喜欢这样。在NodeJS中,这其实很常见。谢谢,我会在答案中加上这一点。天哪,我真不敢相信它这么简单,我从来没见过。非常感谢您快速简单的修复。保存日期:)请注意,如果重画任务
使用此
好点,则此操作将失败。我想你可以通过做