Angular $ http请求在Promise.all中无法实现

时间:2016-11-16 23:53:15

标签: angularjs promise

我在Promise.all中使用了一系列http请求。问题是,当Promise.all满足时,console.log(values);会显示原始dealers数组,而不是已解析的http请求响应对象。为什么我没有在Promise.all中获得已解决的http请求?

  function getDealer(regionMarketDealer) {
    var params = {
      url: API_BASE_URI + 'service/ppv/' + regionMarketDealer,
      method: 'GET'
    };

    return $http(params);
  }

function getAllMarketDealers(dealers) {
  var dealerHttpRequests = dealers.filter(function(dealer) {
    if (dealer.name !== 'All') {
      var promise = getDealer(dealer.name);
      return promise;
    } else {
      return false;
    }
  });

  Promise.all([dealerHttpRequests])
    .then(function(values) {
      console.log(values);
    });
}

1 个答案:

答案 0 :(得分:1)

.filter用于通过在函数中返回true或false来过滤数组,然后使用过滤结果创建一个新数组。

如果您想创建已过滤数组的承诺,则应使用.map并返回承诺

function getDealer(regionMarketDealer) {
    var params = {
      url: API_BASE_URI + 'service/ppv/' + regionMarketDealer,
      method: 'GET'
    };

    return $http(params);
  }

function getAllMarketDealers(dealers) {
  var dealerHttpRequests = dealers.filter(function(dealer) {
        return dealer.name !== 'All';
    })
    .map(function(dealer) {
        return getDealer(dealer.name);
    });

  Promise.all(dealerHttpRequests)
    .then(function(values) {
      console.log(values);
    });
}