AngularJs$q.全部无数据
我真的需要你在以下方面的帮助。 我查询Firebase,按优先级(任务日期)获取任务列表,然后循环结果。 对于每个任务,读取它的相关作业(Firebase中的另一个分支),将结果放在任务属性(jobObject)上,然后返回承诺 最后,$q.all应该返回所有结果。但它就是不起作用 我做错了什么?AngularJs$q.全部无数据,angularjs,Angularjs,我真的需要你在以下方面的帮助。 我查询Firebase,按优先级(任务日期)获取任务列表,然后循环结果。 对于每个任务,读取它的相关作业(Firebase中的另一个分支),将结果放在任务属性(jobObject)上,然后返回承诺 最后,$q.all应该返回所有结果。但它就是不起作用 我做错了什么? 您的问题是在$scope.promises和notpromises上运行$q.all代码的问题在于此块是异步的: taskRef.startAt(startAt).endAt(endAt).on('
您的问题是在$scope.promises和notpromises上运行$q.all代码的问题在于此块是异步的:
taskRef.startAt(startAt).endAt(endAt).on('value', function (tasksSnapshoot) {
当进一步执行代码时,承诺
仍然是一个空数组:
$q.all(promises).then(function (result) {
由于承诺
只是一个空数组(没有未解析的承诺)$q.all
在运行堆栈结束后立即触发(结果是一个空数组)
溶液-
我纠正了这件事。把我的项目中的代码放到这篇文章里是我的错误。它无论如何都不起作用,所以问题仍然存在。谢谢,里昂,回答得很好。救了我一天。如果你能帮我把这个控制器代码转换成服务,会不会太麻烦?我的意思是如何将$q.all返回给控制器,类似于:$scope.events=XXXService.getTasks(年、月);目前,控制器的运行状况良好。我理解我的错误。但服务是另一回事。请帮帮我,没关系,我做到了。谢谢伊兰和莱昂的帮助。我在服务开始时声明了另一个deferred=$q.defere()。然后,就在forEach之外,但在对firebase的调用中,我将deferred.resolve(promises)放在另一个promise中,即我将在循环中创建的所有promises数组放在另一个promise中。在服务结束时:`return$q.all([deferred.promise]),然后(function(){return$q.all(promises);})`控制器内部:`XXXservice.gettask(param).then(函数(res){$scope.events=res;});
$q.all(promises).then(function (result) {
taskRef.startAt(startAt).endAt(endAt).on('value', function (tasksSnapshoot) {
angular.forEach(_.values(tasksSnapshoot.val()), (function (task) {
if (task) {
promises.push(getTask(task));
}
}));
$q.all(promises).then(function (result) {
$scope.events = result;
console.log('results' + result);
});
});