Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJs$q.全部无数据_Angularjs - Fatal编程技术网

AngularJs$q.全部无数据

AngularJs$q.全部无数据,angularjs,Angularjs,我真的需要你在以下方面的帮助。 我查询Firebase,按优先级(任务日期)获取任务列表,然后循环结果。 对于每个任务,读取它的相关作业(Firebase中的另一个分支),将结果放在任务属性(jobObject)上,然后返回承诺 最后,$q.all应该返回所有结果。但它就是不起作用 我做错了什么? 您的问题是在$scope.promises和notpromises上运行$q.all代码的问题在于此块是异步的: taskRef.startAt(startAt).endAt(endAt).on('

我真的需要你在以下方面的帮助。 我查询Firebase,按优先级(任务日期)获取任务列表,然后循环结果。 对于每个任务,读取它的相关作业(Firebase中的另一个分支),将结果放在任务属性(jobObject)上,然后返回承诺

最后,$q.all应该返回所有结果。但它就是不起作用

我做错了什么?


您的问题是在$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);
    });
});