嵌套的 $http 调用 $q.all returns 承诺但未解决

Nested $http calls $q.all returns promises but not resolved

我调用了一个函数,returns 一个带有我想在链式调用中使用的 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;
    };

此函数获取所有消息和 returns 承诺对象 - 这些我无法解析??

    $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];

        });

    };

上面的函数 returns 一个包含 60 个对象的数组..

最后我想在页面上的 ng-repeat 中使用一个新对象。我真的认为这是我 angular 的新手并且承诺....但是在尝试解决这个问题几个小时后我真的需要帮助:)

$q.all 接受一组承诺。在这里,你正在做 $q.all([myPromises]),它立即解决,因为'[myPromise]'是一个数组而不是一个承诺(你给一个数组参数,第一个也是唯一的元素是一个承诺数组当你应该简单地使用 promise 数组时。所以 [] 而不是 [[]])。第二个问题:你没有在父函数中返回这个承诺。

你应该简单地改变块

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

        });

return $q.all(promises);

对于数组中的每个承诺,这将使用一个已解决的数组来解决。