我在.then语句中设置了一系列事件。我希望我理解在这种情况下使用.when()的方法。在ngn-click上调用此函数。问题是我必须点击两次才能完成。 $ rootScope.csa有数据进入.then(函数)中使用的函数。我在Chrome调试器中进行检查时,一切正常,我相信这是因为调试器正在减慢应用程序并使其跟上自己的步伐。另外,当我完成调试器时,它的速度非常快,需要两次点击才能填充$ rootScope.csa.section.data,以便下一个函数按预期工作。前两个语句函数是包含在promise和$ timeout中的服务,$ timeout似乎不会延迟进程。我已多次查看q.derer()但无法解决在这种情况下如何实现它的问题。任何帮助或信息,以满足我正在寻找的需求将不胜感激。
audit.LockData('section', $scope.csa.ID, user.ID, $scope.csa.Revision)
.then($rootScope.csa = audit.RecordsCheck($rootScope.csa)) // gets data and pupulates it to the $rootscope.csa.section.data
.then($rootScope.csa = audit.GetInstance($rootScope.csa), function(){ return $rootScope.csa}) // gets ID(s) from $rootScope.csa.section.data.instances.ID(s) and populates them to the $rootScope.csa.section.instances
.then(function() {if($rootScope.csa.section.data) $location.path('/Update')})
.then(function() {if($rootScope.csa.section.data) $rootScope.$broadcast('root_updated')
});
答案 0 :(得分:1)
您总是需要将回调函数传递给then
,而不是某些调用结果(即使它是一个承诺)。我没有围绕这些功能做什么,但尝试
audit.LockData('section', $scope.csa.ID, user.ID, $scope.csa.Revision)
.then(function(lockResult) {
return audit.RecordsCheck($rootScope.csa)) // gets data and pupulates it to the $rootscope.csa.section.data
})
.then(function(checkResult) {
return audit.GetInstance($rootScope.csa) // gets ID(s) from $rootScope.csa.section.data.instances.ID(s) and populates them to the $rootScope.csa.section.instances
})
.then(function(instance) {
if ($rootScope.csa.section.data) {
$location.path('/Update')
$rootScope.$broadcast('root_updated')
}
});