$ q.all出错

时间:2015-12-30 12:57:36

标签: angularjs angular-promise

我在AngularJS中编写了以下代码,用于执行多重承诺:

CONTROLLER

    var promisesSetUp = {
        setUp: getSetup(),
        brands: getBrands()
    }

   var getSetup = function () {
        var defered = $q.defer();
        var promise = defered.promise;
        $http({
            method: 'GET',
            url: _config.WsUrl + 'api/SalesSetup'
        }).then(function successCallback(response) {
            defered.resolve(response);
        }, function errorCallback(response) {
            defered.reject(response);
        });
        return promise;
    };

    var getBrands = function () {
        var defered = $q.defer();
        var promise = defered.promise;
        $http({
            method: 'GET',
            url: _config.WsUrl + 'api/GetBrandsList'
        }).then(function successCallback(response) {
            defered.resolve(response.data);
        }, function errorCallback(response) {
            defered.reject(response);
        });
        return promise;
    };


    $q.all(
       promisesSetUp
    ).then(function (data) {
        console.log(data);
    }, function (error) {
       console.error(data)
    });

当我执行此代码时,我只有函数getSetUp的响应。控制台输出显示:

RESPONSE

Object: { brands: undefined, setUp: data}

任何人都可以解释为什么我只得到第一个函数的响应?。

由于

1 个答案:

答案 0 :(得分:2)

getSetup() defered.resolve(response); 中,您getBrands()defered.resolve(response.data); response var getBrands = function () { return $http({ method: 'GET', url: _config.WsUrl + 'api/GetBrandsList' }); }; {{1}}

品牌响应似乎是一个对象,但没有现场数据。检查该字段是否存在于网络面板的响应正文中。

您可能只想单独使用{{1}}来解决问题。

此外 - 如果您根本不修改回复,则可以简化方法:

{{1}}