嵌套$ http调用$ q.all返回promises但未解决

时间:2015-05-19 12:50:06

标签: javascript angularjs promise q

我调用一个函数返回一个ID,我希望在链式调用中使用它。一切似乎都有效,直到我想要阅读所有返回的对象..这些是承诺,但我无法找出为什么我无法解决它们。

        //Get bubbles and then it calls another function getBubbleMessage with result from previous and last getBubbleMessage returns an array of promises. 

   $scope.loadStartPage = function () {

        $scope.getBubblesThatUserHasAccessTo().then($scope.getBubbleMessage).then(function (data) {
            $log.info("INFO:: " + data);
            $scope.bubblesWithMessages = data;


        });
    };

    $scope.getBubblesThatUserHasAccessTo = function () {
        var deferred = $q.defer();

        BubblesService.getBubblesUserAccess().then(function (result) {
            deferred.resolve(result);

        });

        return deferred.promise;
    };

这个函数正在解决一些我们需要解决的问题,这些事情是连接到上述服务正在返回的id:s

    $scope.getBubblesThatUserHasAccessTo = function () {
        var deferred = $q.defer();

        BubblesService.getBubblesUserAccess().then(function (result) {
            deferred.resolve(result);

        });

        return deferred.promise;
    };

此函数获取所有消息并返回promise对象 - 这些我无法解决?

    $scope.getBubbleMessage = function (data) {

        var deferred = $q.defer();
        var promises = [];

        angular.forEach(data, function (item) {
            $log.info("DDD" + item.name);
            var promise = BubblesService.getBubbleMessages(item.id, 0, 1);
            promises.push(promise);
        });

        //return $q.all([promises]);
        $q.all([promises]).then(function (result) {
            $log.info(result);
            return result[0];

        });

    };

上面的函数返回一个包含60个对象的数组。 enter image description here

最后,我想在页面上的ng-repeat中使用一个新对象。我真的认为这是一种新的角色和承诺的东西......但经过几个小时的尝试解决这个问题我真的需要帮助:)

1 个答案:

答案 0 :(得分:4)

$ q.all采取了一系列承诺。在这里,你正在做$ q.all([myPromises]),它会立即解决,因为' [myPromise]'是一个数组而不是一个promise(你给一个带有first的数组参数,当你应该只使用promise数组时,唯一的元素就是一个promise数组。所以[]而不是[[]])。第二个问题:您没有在父函数中返回此承诺。

您只需更改块

即可
$q.all([promises]).then(function (result) {
            $log.info(result);
            return result[0];

        });

return $q.all(promises);

将解析数组中每个promise的已解析数组。