AngularJs $q.全部没有数据

标签 angularjs

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

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

我在这里做错了什么? http://jsfiddle.net/danielchindea/R4M7x/1/

        var startAt = '2014-03-01',
            endAt = '2014-03-31',
            promises = [];


        var getTask = function (task) {
            var d = $q.defer();

            jobRef.child(task.jobId).on('value', function (jobSnapshoot) {
                task.jobObject = jobSnapshoot.val();
                        d.resolve(task);
            });

            return d.promise;
        };


        taskRef.startAt(startAt).endAt(endAt).on('value', function (tasksSnapshoot) {
            angular.forEach(_.values(tasksSnapshoot.val()), (function (task) {
                if (task) {
                  promises.push(getTask(task));
                }
            }));
            console.log('finish');
        });

        // it was $q.all($scope.promises) but this isn't the issue

        $q.all(promises).then(function (result) {
            $scope.events = result;
            console.log('results' + result);
        });

最佳答案

您的代码的问题是该 block 是异步的:

taskRef.startAt(startAt).endAt(endAt).on('value', function (tasksSnapshoot) {

并且当执行进一步的代码时,promises 仍然是一个空数组:

$q.all(promises).then(function (result) {

因为 promises 只是一个空数组(没有 Unresolved Promise)$q.all 在运行堆栈结束后立即触发(使用空数组结果)。

解决方案 - http://jsfiddle.net/R4M7x/7/

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);
    });
});

关于AngularJs $q.全部没有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24199306/

相关文章:

javascript - 如何以编程方式选择一个选项作为所选选项?

javascript - 循环填充表格

javascript - 如何通过AngularJS中的ng-repeat动态创建的id获取元素

javascript - AngularJS:未捕获错误:[$rootScope:infdig] 达到 10 次 $digest() 迭代

javascript - Angular Directive(指令)中的模糊无法正常工作

angularjs - 如何在 Protractor 测试中验证 $httpBackend 模拟期望?

javascript - AngularJS:无法读取未定义的属性 ''

Javascript 函数与使用前预定义的类(特别是 angularjs)

javascript - angular js href在url开头添加不安全

html - 覆盖页面其余部分的 Div 仅呈现到浏览器高度,而不是内容